【问题标题】:Finding characters within a string in C在C中查找字符串中的字符
【发布时间】:2010-11-30 04:20:48
【问题描述】:

我正在用 netbeans 用 C 语言编写一个算法来查找字符串中的星号。

int main() {
    int M=0, i, j;
    scanf("%i",&M);
    int pos[M];
    char c[M];
    scanf("%s", c);

    i=0;
    j=1;

    while(c[i] != '\0'){
        if(c[i]=='*'){
            pos[j] = i;
            j++;
        }
        i++;
    }

    printf("Asterisks in positions: \n\n");

    for(j=1; j<=i; j++){
        printf("%i", pos[j]);
    }
    return 0;
}

但它不起作用,即使M是一个小数字,它也会打印很多数字。

【问题讨论】:

  • 你没有问问题。 StackOverflow 是一个回答问题的地方。
  • 你给你的程序提供什么输入?你得到什么输出?你期望什么输出?

标签: c string character


【解决方案1】:

问题似乎是您从未考虑找到的字符数。您打印整个向量,使用i 而不是j 进行迭代。 j 保存匹配的数量。

另外,尝试使用来自 cstring 的strchr :)

获取第一个位置,然后从下一个字符开始重新搜索,直到返回null。

【讨论】:

  • strcspn() 返回跳过的字符数。
【解决方案2】:

有关您找到多少个星号的信息存储在计数器 j 中。这个变量在 for 循环中被重置:

for(j=1; j<=i; j++)

此外,这个 for 循环一直到 i,这是您输入字符串的长度。尝试按如下方式修改循环:

for(i=1; i<j; i++){    
    printf("%i", pos[i]);    
} 

【讨论】:

    【解决方案3】:

    在您的while 循环完成后,j 保存记录的位置总数,因此您应该从pos[1] 打印到pos[j]。您当前的循环从pos[1] 打印到pos[i]。只需在最终循环中反转变量即可:

    for(i=1; i<=j; i++){
        printf("%i", pos[i]);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 2012-11-10
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多