问题描述
- C语言程序在字符串中查找某字符
-
#include
int main(void)
{ int i, j;
char ab[80];
char x;
printf("Input a character: ");
scanf("%c",&x);
printf("Input a string: ");
gets(ab);
for(i=0;i<16;i++)
if (ab[i]==x) j=i;
printf("index=%d",j);}
输入一个字符,再输入一个以回车结束的字符串(少于80 个字符),在字符串中查找该字符?如果找到,则输出该字符在字符串中所对应的最大下标(下标从0开始);
错哪里了呢
解决方案
首先你可以用getchar()接收回车,也可输入的时候用空格隔开不要用回车!原因楼上已经解释过了!
解决方案二:
首先,for(i=0;i<16;i++)
下标有问题,应该是80
其次,你用gets的话,读入的是一个回车键,因为你输入字符之后,打了回车才可以看到下面的提示。
建议改成scanf("%s",&ab);
或者在gets前加入getchar();读取回车
还有数组读入之前最好初始化一下,要不然用strlen(ab)控制一下遍历的长度。
最后,其实你可以从后往前遍历,一旦遇到要找的字符,就退出遍历。
还有,找不到的时候,也可以给个提示。
以上- -
解决方案三:
for(i=0;i<16;i++)//输入的字符串大小是不确定,所以16应该替换成trlen(ab)
if (ab[i]==x) j=i;
printf("index=%d",j);//遍历字符串之后,可能没有匹配的字符,所以需要设置标记位,楼上的方法也不错
//把j初识化为非数组下标,比如 j=-1,然后根据j的状态判断有没有匹配字符:
if(j==-1)
printf("NotFoundn");
else
printf("index=%dn",j);
解决方案四:
先获得字符串的长度啊,不要用固定的长度
解决方案五:
for(i=0;i<16;i++)
既然是80个字符,为什么这里是16
解决方案六:
int main(void)
{ int i, j=-1;
char ab[80];
char x;
printf("Input a character: n");
scanf("%c",&x);
printf("Input a string: n");
scanf("%s", ab);
for(i=0;i<80;i++)
if (ab[i]==x) j=i;
if(j==-1)
printf("NotFoundn");
else
printf("index=%dn",j);
}
试试这个
解决方案七:
int main(void)
{
int i,j;
char ab[80];
char x;
printf("Input a character: ");
scanf("%c",&x);
//getch();
printf("Input a string: ");
scanf("%s",ab);
for(i=0;i<16;i++)
if (ab[i] == x)
j=i;
printf("index=%d",j);
}
解决方案八:
#include
#include
#include
int main()
{
int i, j, len;
char ab[80];
char x;
printf("Input a character: ");
scanf("%c",&x);
getchar();
printf("Input a string: ");
gets(ab);
len = strlen(ab);
for(i = 0; i < len; i++)
if (ab[i] == x) j = i;
printf("index=%d",j);
return 0;
}
解决方案九:
int main()
{
int i, j=-1;
char ab[80];
char x;
printf("Input a character: ");
scanf("%c", &x);
//getch();
printf("Input a string: ");
scanf("%s", ab);
for(i = strlen(ab) - 1; i >= 0; i--)//获取最大下标
{
if (ab[i] == x)
{
j=i;
break;
}
}
if(j == -1)
printf("NotFoundn");
else
printf("index=%dn",j);
}
解决方案十:
原因大家都说了,总结一下,所有查找/比较的算法都需要注意操作数的范围。