2 jzx 606 jzx_606 于 2015.05.28 16:30 提问

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开始);
错哪里了呢

11个回答

u010655288
u010655288   2015.05.28 17:12
已采纳

首先你可以用getchar()接收回车,也可输入的时候用空格隔开不要用回车!原因楼上已经解释过了!

qq_17246605
qq_17246605   2015.05.28 16:46

首先,for(i=0;i<16;i++)
下标有问题,应该是80
其次,你用gets的话,读入的是一个回车键,因为你输入字符之后,打了回车才可以看到下面的提示。
建议改成scanf("%s",&ab);
或者在gets前加入getchar();读取回车

还有数组读入之前最好初始化一下,要不然用strlen(ab)控制一下遍历的长度。
最后,其实你可以从后往前遍历,一旦遇到要找的字符,就退出遍历。
还有,找不到的时候,也可以给个提示。

以上- -

jzx_606
jzx_606 又是你,早看到就采纳你了
2 年多之前 回复
qq_17246605
qq_17246605 哎呀,回复为什么不能修改,提交了才想起来,下标不是改成80,是改成strlen(ab)...因为是少于80字符的。。。
2 年多之前 回复
yunfenglw
yunfenglw   2015.05.28 20:17

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);

lx624909677
lx624909677   Ds   Rxr 2015.05.29 11:04

先获得字符串的长度啊,不要用固定的长度

caozhy
caozhy   Ds   Rxr 2015.05.28 16:35

for(i=0;i<16;i++)
既然是80个字符,为什么这里是16

cherry91xw
cherry91xw   2015.05.28 16:41

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);
}
试试这个

a1193561652
a1193561652   Rxr 2015.05.29 13:30
 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);
}
u012953466
u012953466   2015.05.29 13:55

#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;
}

u010973206
u010973206   2015.05.29 13:57

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);
}
nswcfd
nswcfd   2015.05.29 18:52

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

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片