C语言程序在字符串中查找某字符

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个字符,为什么这里是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("NotFound\n");
else
printf("index=%d\n",j);
}
试试这个

首先,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("NotFound\n");
else
printf("index=%d\n",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("NotFound\n");
    else
        printf("index=%d\n",j);
}

原因大家都说了,总结一下,所有查找/比较的算法都需要注意操作数的范围。

找到第一个就应该跳出循环吧? 还有那个固定长度16,也不对
如果要打印所有的位置,那每次找到都要打印,要花括号括起来的。