1. 程式人生 > 其它 >第2關:文字串裡單詞、數字和符號的識別

第2關:文字串裡單詞、數字和符號的識別

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");
			
		


	}

}