题目简介
题目思路
首题目给的条件是:
- 关键字:main if else for while int
- 自定义标识符:除关键字外的标识符
- 整数:无符号整数
- 界符:{ } ( ) , ;
- 运算符:= + - * / < <= > >= == !=
当出现这些符号时,需要进行判断,来获取输出,输出的格式如以下所示:
- 关键字:用keyword表示
- 自定义标识符:用identifier表示
- 整数:用integer表示
- 界符:用boundary表示
- 运算符:用operator表示
主程序中用一个temp字符串来存储非运算符、界符之外的字符。
以样例为例:
当跑main时,他会把main储存到temp字符串数组中,当跑到(时,他会判断temp中的字符,来判断其是不是关键字,如果是的话,进行输出,不是的话,输出其为自定义标识符。其他的也同理,最后判断输出temp。
注意注意
- 第一个错的地方,容易出现在判断 <= 这类,忘记i++
- 第二个错误的地方,容易出现在输出上面,经常性的会漏掉输出中个某个逗号或者其他的
代码
/*
author:苦酒
QQ:1793929520
blog:huangliangshuai.com
*/
#include <iostream>
#include <string>
using namespace std;
string kind[5] = {"keyword","identifier","integer","boundary","operator"};
string keyword[6] = {"main","if","else","for","while","int"};
void decide(string s)
{
if(s[0] >= '0' && s[0] <= '9')//如果当前判断的第一个字符为数字的话,直接输出
{
cout<<"("<<kind[2]<<","<<s<<")"<<endl;
}
else
{
int f = 0;//此处作为标记
for(int i = 0; i < 6; i++)
{
if(s == keyword[i])//如果当前temp存储的字符串与关键字里面的字符串相等,则改变标记的数值,并且输出关键字,终止循环,节省时间
{
f = 1;
cout<<"("<<kind[0]<<","<<s<<")"<<endl;
break;
}
}
if(f == 0)//如果找不到关键字的话,则认为这是一个自定义标识符,进行输出
{
cout<<"("<<kind[1]<<","<<s<<")"<<endl;
}
}
}
int main()
{
string s;
while(cin>>s)
{
string temp;
temp = "";
int len = s.length();
for(int i = 0; i < len; i++)
{
if(s[i] == '=' || s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '<' || s[i] == '>' || s[i] == '!')//判断输入的是不是运算符
{
if(temp.length())
{
decide(temp);
}
temp = "";
if(i + 1 < len && s[i + 1] == '=')//判断输入的是不是<= >= == ,是的话就进行输出、
{
cout<<"("<<kind[4]<<","<<s[i]<<s[i+1]<<")"<<endl;
i++;
}
else
{
cout<<"("<<kind[4]<<","<<s[i]<<")"<<endl;//反之就输出单字符的运算符
}
}
else if(s[i] == '(' || s[i] == ')' || s[i] == '{' || s[i] == '}' || s[i] == ',' || s[i] == ';')//判断当前是不是界符
{
if(temp.length())
{
decide(temp);
}
temp = "";
cout<<"("<<kind[3]<<","<<s[i]<<")"<<endl;
}
else
{
temp = temp + s[i];//将全部不是的存储到temp里面
}
}
if(temp.length())
{
decide(temp);
}
}
return 0;
}
/***************************************************
User name: jk170631黄良帅
Result: Accepted
Take time: 0ms
Take Memory: 196KB
Submit time: 2019-11-18 21:33:32
****************************************************/