洛谷P1597 语句解析.

第一次错误代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int len=0;
int state;
char ch[300];
int ans[5];
int main()
{
gets(ch);
len=strlen(ch);
for(int i=0;i<len;i++)
{
if(ch[i]=='a'&&state==0)
{
state = 1 ;
continue;
}
if(ch[i]=='b'&&state==0)
{
state = 2 ;
continue;
}
if(ch[i]=='c'&&state==0)
{
state = 3 ;
continue;
}
if(ch[i]>='0'&&ch[i]<='9')
{
ans[state] = ch[i]-'0';
state = 0;
}
else if((ch[i]=='a'||ch[i]=='b'||ch[i]=='c')&&state!=0)
{
ans[state] = ans[ch[i]]; //改动位置
state = 0;
}
}
cout<<ans[1]<<" "<<ans[2]<<" "<<ans[3];
return 0;
}
AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int len=0;
int state;
char ch[300];
int ans[5];
int main()
{
gets(ch);
len=strlen(ch);
for(int i=0;i<len;i++)
{
if(ch[i]=='a'&&state==0)
{
state = 1 ;
continue;
}
if(ch[i]=='b'&&state==0)
{
state = 2 ;
continue;
}
if(ch[i]=='c'&&state==0)
{
state = 3 ;
continue;
}
if(ch[i]>='0'&&ch[i]<='9')
{
ans[state] = ch[i]-'0';
state = 0;
}
else if((ch[i]=='a'||ch[i]=='b'||ch[i]=='c')&&state!=0)
{
ans[state] = ans[ch[i]-'a'+1]; // 改动位置
state = 0;
}
}
cout<<ans[1]<<" "<<ans[2]<<" "<<ans[3];
return 0;
}
原因分析
将char与int 混用了
博客主要讨论了在解决洛谷P1597题目时遇到的问题,即在进行语句解析过程中错误地使用了char类型作为数组的下标,导致程序出错。作者分享了错误代码和最终的AC(Accepted)代码,并分析了错误产生的原因,指出在编程中需要注意不同类型间的转换,尤其是char和int之间的混用。
1413

被折叠的 条评论
为什么被折叠?



