2010-11-30 70 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]); 
}