我正在尝试一个问题,我必须写下#34;接受"对于以b结尾的字符串。我在使用这部分代码时遇到了问题:
char s[100];
int length,i=0;
gets(s);
length=strlen(s);
for( i=0; i<length; i+2)
{
if(s[i]=='b' && s[i+1]=='\0')
printf("Accept");
else printf("Not accept");
}
但是这个循环无限运行。 当我使用它时,同样的问题得到了解决:
while(s[i]!='\0')
{
if(s[i]=='b' && s[i+1]=='\0')
printf("Accept");
else printf("Not accept");
i+2;
}
我知道for循环的逻辑存在问题,&amp;已经尝试了很多来解决它,但失败了。我是编程新手。可以帮助我。
答案 0 :(得分:5)
for( i=0; i<length; i+2)
i
未递增。所以它应该是:
for( i=0; i<length; i+=2)
答案 1 :(得分:2)
您的i
循环中没有递增for
:
for( i=0; i<length; i+2)
所有这一切都是向i
添加2并抛弃结果。您可能打算增加2,但这也不会起作用。如果你的字符串包含偶数个字符,你将永远找不到最后一个字符。
所以你需要做的是在每次迭代时增加1:
for( i=0; i<length; i++)
编辑:
更好的是,只需检查最后一个字符并完全摆脱循环:
if (s[length-1] == 'b') {
printf("Accept\n");
} else {
printf("Not Accept\n");
}
答案 2 :(得分:2)
你在哪里初始化你的字符串?你也错过了一个括号吗?你也许想打印&#34;不接受&#34;一旦。检查下面的解决方案。
但是如果你直接检查数组的最后一个字符,那么真的会容易得多。&#39; b&#39; (使用索引length-1
),你不再需要循环(因为你知道长度)。
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
strcpy(s,"test");
int length = 0, i = 0, j = 0;
length=strlen(s);
for( i=0; i<length; i++)
{
if(s[i]=='b' && s[i+1]=='\0')
{
printf("Accept");
j = 1;
}
}
if(j==0) printf("Not accept");
return 0;
}
答案 3 :(得分:1)
在for
循环中,您永远不会增加i
变量:
for( i=0; i<length; i+2) // should probably use i++ instead of i+2
答案 4 :(得分:1)
您尝试解决的问题(如果我正确地阅读了这些尝试)是您要确定最后一个字符是否为字母'b'。
您已使用以下方法找到字符串的长度:
length=strlen(s);
因此,使用此事实,您可以执行以下操作
if (length > 0 && s[length-1] == 'b') {
printf("Accept");
}
else
{
printf("Not accept");
}