杭电2024题 题目要求:输入一个字符串,判断其是否是C的合法标识符。

#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(cin>>str)
{
int length;
int i=0;
int count=0;
length=str.length();
if(str[0]=='_'||(str[0]<'Z'&&str[0]>'A')||(str[0]<'z'&&str[0]>'a'))
{
for(i=0;i<length;i++)
{
if(str[i]!='40')
count++;
}
if(count==length)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;

}
else
cout<<"no"<<endl;
}
return 0;
}
有空格的话,你做拆扒这种读取方式会被读取成两个字符御弯串,而且判断方式中》=字母也是行的,你没有=号,而且对合法纯昌字符串的判断思路也不对,c语言标准有两个,一个是字符串只能由字母,数字,下划线组成,第二是首位只能是下划线或字母,你那根据长度判断有无空格,若有其它字符%,。等也不能判断
另附本人代码如下,将你的稍做改动
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
char str[51];
int n,i,j;
scanf("%d\n",&n);
for( j=0; j<n; j++)
{
int length;
gets(str);
length=strlen(str);
if(str[0]=='_'||(str[0]<='Z'&&str[0]>='A')||(str[0]<='z'&&str[0]>='a'))
{
for(i=1;i<length;i++)
{
if(str[i]=='_'||(str[i]<='Z'&&str[i]>='A')||(str[i]<='z'&&str[i]>='a')|| ( str[i]<='9' && str[i]>='0'))
;
else
break;
}
if(i == length)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
else
cout<<"no"<<endl;
}
return 0;
}
对于读粗则取察樱行可以这样
char str[100];
while(gets(str))
{
cout <岩没棚< str << endl;
}
问题是???