jzx_606
2015-05-28 08:30
采纳率: 81.8%
浏览 8.8k
已采纳

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条回答 默认 最新

  • Mr.Stone^_^ 2015-05-28 09:12
    已采纳

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

    已采纳该答案
    评论
    解决 无用 1
    打赏 举报
  • threenewbee 2015-05-28 08:35

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

    评论
    解决 无用
    打赏 举报
  • 半曲恋江南 2015-05-28 08: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);
    }
    试试这个

    评论
    解决 无用
    打赏 举报
  • 薇酱 2015-05-28 08:46

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

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

    以上- -

    评论
    解决 无用
    打赏 举报
  • 天朗-星空 2015-05-28 12: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 2015-05-29 03:04

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

    评论
    解决 无用
    打赏 举报
  • 纵横车 2015-05-29 05: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);
    }
    
    评论
    解决 无用
    打赏 举报
  • xiangzi7758258 2015-05-29 05: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;
    }

    评论
    解决 无用
    打赏 举报
  • 参观西湖 2015-05-29 05: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 2015-05-29 10:52

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

    评论
    解决 无用
    打赏 举报
  • Heart09 2015-05-30 03:42

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题