第2關:文字串裡單詞、數字和符號的識別
阿新 • • 發佈:2022-05-31
ps
注意tab鍵特判
任務描述
編寫一個lex描述檔案,識別出指定文字串裡的單詞、數字和符號(空格不作處理)。
程式設計要求
完成上述程式設計任務,將C語言源程式複製貼上到右側程式碼編輯器,點選“評測”按鈕,執行程式,系統會自動進行結果對比。
測試說明
平臺會對你編寫的程式碼進行測試:
測試輸入:
using namespace std;
int main()
{
int year = 2022;
cout << "hello" << endl;
return 0;
}
預期輸出:
using 單詞 namespace 單詞 std 單詞 ; 符號 int 單詞 main 單詞 ( 符號 ) 符號 { 符號 int 單詞 year 單詞 = 符號 2022 數字 ; 符號 cout 單詞 < 符號 < 符號 " 符號 hello 單詞 " 符號 < 符號 < 符號 endl 單詞 ; 符號 return 單詞 0 數字 ; 符號 } 符號
code
//#include <bits/stdc++.h> #include<stdio.h> #include<string.h> #define maxn 10000 char str[maxn]; void fun(char str[]); int main() { int i = 0; while ((str[i] = getchar()) != EOF) { i++; } str[i] = '\0'; fun(str); return 0; } void fun(char str[]) { for (int j = 0; str[j] != '\0'; j++) { if (str[j] >= '0' && str[j] <= '9') { //TODO數字 while (str[j] >= '0' && str[j] <= '9') { putchar(str[j]); j++; } j--; printf(" 數字\n"); continue; } if ((str[j] >= 'a' && str[j] <= 'z') || (str[j] >= 'A' && str[j] <= 'Z')) { //TODO字母 while ((str[j] >= 'a' && str[j] <= 'z') || (str[j] >= 'A' && str[j] <= 'Z')) { putchar(str[j]); j++; } j--; printf(" 單詞\n"); continue; } if (str[j] == ' '||str[j] == '\n'||str[j]==' ') { continue; } //符號 putchar(str[j]); printf(" 符號\n"); } }