在C中查找字符串中的字符

时间:2010-11-30 04:20:49

标签: c string character

我正在使用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是一个小数字,也会打印很多数字。

3 个答案:

答案 0 :(得分:2)

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

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

获取第一个位置,然后从下一个字符再次搜索,直到返回null。

答案 1 :(得分:1)

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

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

此外,这个for循环一直到i,这是你输入字符串的长度。尝试按如下方式重新处理循环:

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

答案 2 :(得分:0)

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

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