2016-07-03 19 views
-6
int i=0,j=0; 

char string[100], string2[100]; 
scanf("%s",&string); 

while (string[i]!='\0'){ 
    if(string[i]=='a' || string[i]=='e' || string[i]=='i' || string[i]=='o' || string[i]=='u' || string[i]=='A' || string[i]=='E' || string[i]=='I' || string[i]=='O' || string[i]=='U'){ 
     string[i]=string2[j]; 
    } 
    string[i] = tolower(string[i]); 
    string[i] = string2[j]; 
    string2[j-1]='.'; 
} 
printf("%s", string2); 

return 0; 

問題は単語を入力して母音をすべて削除し、「。」を追加しています。すべての大文字を小文字にする。 string以来Cプログラムの空白の出力に問題があります

+5

「i」が増分されないため、プログラムは終了しません。 - 問題を見つけるために*デバッガー*を使うのはどうですか? –

+2

...そして 'string2 [j-1] = '。';最初の保存時に'; 'は' j'が '0'で結果のインデックスが' -1'なので未定義の動作を呼び出します。また、charを保存していても、 'j'をインクリメントすることはありません。 'string2 [j]'は一度もなかったので、 'string [i] = string2 [j];'は他のものより推測に似ています。これは直前の行で* indeterminate *初期化されました。短い答え:推測をやめ、あなたのマテリアルをもう一度見直してください。 – WhozCraig

+1

'string2'には何がありますか?そしてなぜ 'string [i] = tolower(string [i]);の後に' string [i] 'を直ちに上書きしますか? –

答えて

1

が、これはあなたに二重のポインタを与えるとエラーになり、scanf()に渡すときに&を使用していない、配列です。 ifステートメントを使用すると、いつでも問題を尋ねることができます(たとえば、タイプミスが簡単に起きるなど)。index()とすべての母音を含む文字列を使用してこのテストを簡素化できます。各セクションで実装されている要件のいずれかを示すコードを記述するときには、コメントするのに苦労することはありません。 i変数は、ループを介して毎回インクリメントする必要があります。string2に新しい文字が追加されるたびにj変数をインクリメントする必要があります。 scanf()の後には、stringに割り当てるべきではなく、の読み取り専用として扱い、string2にのみ割り当てます。そしてj-1は起こりません。最後に、string2は初期化されていないため、ガベージが存在する可能性があり、ヌル終了していません。一緒にすべてを置く:「すべての定数は後に」「すべての子音の後に」、そうでなければ、定数によって何を意味するのか明確にしてください読むことを意図した私は仮定してい

#include <ctype.h> 
#include <stdio.h> 
#include <strings.h> 

#define VOWELS "AEIOUaeiou" 

int main() 
{ 
    char string[100], new_string[100] = { 0 }; 

    // enter a word 
    scanf("%s", string); 

    for (int i = 0, j = 0; string[i] != '\0'; i++) 
    { 
     // remove all vowels 
     if (index(VOWELS, string[i]) == NULL) 
     { 
      // make all upper case letters lower case 
      new_string[j++] = tolower(string[i]); 

      if (isalpha(string[i])) 
      { 
       new_string[j++] = '.'; // add '.' after every consonant 
      } 
     } 
    } 

    printf("%s\n", new_string); 

    return 0; 
} 

関連する問題