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


	}

}
posted @ 2022-05-31 11:03  ethon-wang  阅读(314)  评论(0编辑  收藏  举报