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