2010-11-30 51 views
0

我正在用netbeans在C中编写一个算法来查找字符串中的星号。查找C中字符串中的字符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是一个小数字。

+0

您没有提出任何问题。 StackOverflow是一个可以回答问题的地方。 – abelenky 2010-11-30 04:24:03

+0

你给你的程序输入了什么?你得到什么输出?你期望输出什么? – abelenky 2010-11-30 04:24:41

回答

1

关于有多少你发现星号被存储在计数器j的信息。此变量被在重置循环:

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

此外,这对循环去一路攀升到我,这是你的输入字符串的长度。尝试重新制作您的循环,如下所示:

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

这个问题似乎是你从来没有考虑到发现的字符数。您打印整个矢量,使用i而不是j进行迭代。它是j,包含比赛的数量。

而且,尝试使用strchr,从为c_string :)

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

0

while循环完成后,j持有记录位置的总数,所以你应该从打印到pos[1]pos[j]。您当前的循环打印从pos[1]pos[i]。只是反转您的最终循环的变量:

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