2016-08-02 8 views
1

私はCの配列を使用して、以下のコードについて書きました。
私は=>I am a boy.
に入ったときに所望の出力は、ここ=>boy a am I.
は、以下の私のコードであり、それは動作しませんです。
私は2日間のバグを発見したと、他の人があなたのコードで複数の問題がある指摘したように、私はまだ問題C about words reverse

int i,j,k,m,start,temp_end,len; 
char str[30]; 
gets(str); 

len=strlen(str); 
temp_end=len-1; 

for(k=len;k>0;k--) 
{ 
    if(str[k]==" ") 
     start=k; 
    for(j=start+1;j<temp_end;j++) 
    { 
     printf("%c",str[j]); 
    } 
    printf(" "); 
    temp_end=k; 
} 
for(m=0;m<temp_end;m++) 
{ 
    printf("%2c.",str[m]); 
} 
+0

'if(str [k] ==" ")'では、 '' ''は文字ではなく文字列です。代わりに 'if(str [k] == '')'を試してください。 – user3386109

+1

"動作しません"。それではどうしますか?あなたは問題を見つけるのを助けるためにデバッガを使ってみましたか?しかし、最初の 'if(str [k] ==" ")'は間違っています。 'str [k]'は 'char'ですが' '' 'は文字列です。 – kaylum

+0

申し訳ありませんが、私の言葉を変更する必要があります – Hardy

答えて

1

を見つけることができませんでした。条件if(str[k]==" ")

  1. 、あなたは間違っている、単一のスペース文字を表すために" "を使用しています。単一の空白文字の場合は、' 'を使用する必要があります。 " "は、単一の空白文字を持つstringです。

  2. 毎回for(j=start+1;j<temp_end;j++) { … }ループが実行されています。ただし、これは、新しい空白、' 'が見つかった場合にのみ実行する必要があります。このためにフラグを使用することができます。 printf(" ");と同じで、temp_end = k;

  3. printf("%2c.", str[m])はタイプミスのようです。なぜ%2c.ですか?ちょうど"%c"をやっているはずです。


/* Use a flag to know when to print */ 
    /* 0 means don't print, 1 means print */ 
    int pflag = 0; 

    for(k = len-1; k >0; k--) 
    { 
      if(str[k]==' ') { 
        pflag = 1; /* new space found, update the flag to print */ 
        start=k; 
      } 
      if (pflag == 1) /* check flag to see if print needed */ 
      { 
        for(j=start+1;j<temp_end;j++) 
        { 
          printf("%c",str[j]); 
        } 
        printf(" "); 
        temp_end=k; 
        pflag = 0; /* reset flag after printing */ 
      } 
    } 

    for(m=0;m<temp_end;m++) 
    { 
      printf("%c",str[m]); 
    } 

また、gets()を使用しないでください。 fgets()などを使用してください。