c
  • string
  • character
  • 2010-11-30 27 views 0 likes 
    0

    文字列にアスタリスクを見つけるために、netbeansを使って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

    +0

    あなたはあなたのプログラムにどんなインプットを与えていますか?あなたはどんな出力を得ていますか?どのような出力を期待していますか? – abelenky

    答えて

    1

    見つかったアスタリスクの数に関する情報は、カウンタjに格納されています。この変数は、ループのためにリセットされます:

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

    さらに、forループこれはあなたの入力文字列の長さである、ずっと私に上がります。ループを次のように修正してみてください。

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

    問題は、見つかった文字の数を考慮に入れていないようです。 jの代わりにiを使用して、ベクトル全体を印刷します。一致の数を保持するのはjです。

    また、CStringのから、strchrを使用してみてください:)

    は、nullが返されるまで、次の文字から再度検索、その後、最初の位置を取得します。

    +2

    または、 'strcspn()'はスキップされた文字の数を返します。 –

    0

    あなたwhileループが完了した後、jは、記録された位置の総数を保持しているので、あなたはpos[j]pos[1]から印刷する必要があります。現在のループはpos[1]からpos[i]に印刷されます。

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

     関連する問題

    • 関連する問題はありません^_^