问题及代码https://paste.ubuntu.com/p/xhYcb4tvwN/
差以毫厘,谬以千里。
题目二:enum输出
enum是枚举( enumerate)的缩写,在C语言中是一种基本数据类型,它可以让数据更简洁,更易读。规定各项的值只能是int 壁变量,若未定义第一项的值,则默认第一项的值从0开始:若已定义某项的值,则从该项后值递增加一-
输人一行c语言的enum定义语句,且符合C语言语法.各项在大括号之间,并保证大括号之间无空格,要求输出各项的名称和对应的值,占一行,且名称与值之间有一个空格.保证输入的长度不超过 1000000个字符,且项至多为1000个,每个项的长度至多为1000个字符.
测试用例1:
输入:
enum BOOL.{truc,falsc};
输出:
true 0
false 1
测试用例2:
输入:
enum date{JAN=1,FEB.MAR,APR,MAY,JUN,JULY,AUG,SEP,OCT,NOV,DEC,MON=1,TUE,WED,THU,FRI,SAT,SUN,found-1949};输出:
JAN1
FEB2
MAR3
APR4
MAY5
JUN6
JULY7
AUG8
SEP9
OCT10
NOV11
DEC12
MONI
TUE2
WED3
THU4
FRI5
SAT6
SUN7
found1949
问题:输出很多=或空格,输出有问题
错误代码和正确代码对比:
1,for(i=i+1;s[i]!='}';i++){
与int i,len=strlen(s); for(i=i+1;i<len-2;i++){
2,while(s[i]!=','&&s[i]!='='){
与while(s[i]!=','&&s[i]!='='&&i<len-2){
3,
int temp=0;
while(s[i]!=','){
printf("%c",s[i]);
temp=temp*10+s[i]-'0';//记录值
}
printf("\n");
cnt=temp++;//更新cnt
少了判断条件和i++。以及输出和temp自增。
int temp=0;
i++;//跳过=
while(s[i]!=','&&i<len-2){
temp=temp*10+s[i]-'0';//记录值
i++;
}
printf("%d",temp);
printf("\n");
cnt=++temp;//更新cnt
问题代码:
#include<stdio.h>
int cnt=0;
void search(char s[]){
int i;
for(i=0;s[i]!='{';i++);//找到第一项
for(i=i+1;s[i]!='}';i++){
while(s[i]!=','&&s[i]!='='){//先输出各项名称
printf("%c",s[i]);
i++;
}
if(s[i]=='='){//有赋值,输出值
printf(" ");
int temp=0;
while(s[i]!=','){
printf("%c",s[i]);
temp=temp*10+s[i]-'0';//记录值
}
printf("\n");
cnt=temp++;//更新cnt
}else{//逗号跳出,则枚举
printf(" %d\n",cnt);
cnt++;
}
}
}
int main(){
char s[1000000];
gets(s);
search(s);
return 0;
}
正确代码:
#include<stdio.h>
#include<string.h>
int cnt=0;
void search(char s[]){
int i,len=strlen(s);
for(i=0;s[i]!='{';i++);//找到第一项
for(i=i+1;i<len-2;i++){
while(s[i]!=','&&s[i]!='='&&i<len-2){//先输出各项名称
printf("%c",s[i]);
i++;
}
if(s[i]=='='){//有赋值,输出值
printf(" ");
int temp=0;
i++;//跳过=
while(s[i]!=','&&i<len-2){
temp=temp*10+s[i]-'0';//记录值
i++;
}
printf("%d",temp);
printf("\n");
cnt=++temp;//更新cnt
}else{//逗号或}跳出,则枚举
printf(" %d\n",cnt);
cnt++;
}
}
}
int main(){
char s[1000000];
gets(s);
search(s);
return 0;
}