2016-05-22 5 views
-2

私のコードは、指定されたテストケース上の文字列内の単語を逆転させるはずでしたが、最後の文字列まで、そしてテストケースの入力文字列が繰り返されるまで読み込まれた前の文字列と連結します。私は単純な方法で実装しようとしました

INPUT 3:私は

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

#define MAXCHARS 1000 
#define MAXWORDS 1000 

typedef char word_t[MAXCHARS+1]; 
int getwords(char W[]); 

int main(int argc,char*argv[]){ 
    word_t oneword, all_words[MAXWORDS]; 
    int num_words = 0,value; 
    int testcases,i,n; 

    scanf("%d",&testcases); 

    getchar(); 

    for(i =1;i<=testcases;i++){ 
     while((value = getwords(oneword))!=1){ 
      strcpy(all_words[num_words],oneword); 
      num_words++; 

      /*if(value ==1){ 
      value = 2; 
      }*/ 
     } 

     printf("Case #%d:",i); 

     for(n=num_words;n>=0;n--){ 
      printf("%s",all_words[n]); 
     } 

     printf("\n"); 
    } 

    return 0; 
} 

int getwords(char W[]){ 
    int c,len =0,NewSpaceOrline =0; 

    while((c=getchar())!='\n'){ 
     W[len] = c; 
     len++; 

     if(c == ' '){ 
      W[len] = '\0'; 
      NewSpaceOrline =0; 
      return NewSpaceOrline; 
     } 

    } 

    W[len] ='\0'; 
    NewSpaceOrline =1; 

    return NewSpaceOrline; 

} 
+3

質問を再入力してください – piyushj

+0

'strcpy(all_words [num_words]、oneword);を追加してください。 strcat(all_words [num_words]、 ""); 'whileループの後。 – BLUEPIXY

答えて

-1

をfoobarにしています私は始めるためにあなたにこの機能をあげる:私は罰金foobarに良いが

結果が示すokですよ。残りは、私はOPが終了するために出発します。

void rev(char *str) 
{ 
    char *bgn, *end; 

    end = str + strlen(str) - 1; 
    for (bgn = str; end > bgn; --end, ++bgn) { 
     char tmp; 

     tmp = *bgn; 
     *bgn = *end; 
     *end = tmp; 
    } 
} 
+0

なぜdownvote?少なくともあなたの前に説明を与える – stackptr

+0

ねえみんな、問題はwhileとループの終了に使用されているフラグの状態です – coder

0

主な問題は、テストケース間でnum_wordsをリセットしないことです。

試してください:あなたはあなたが満たされたことがありませんall_words[num_words]から始めると

for(n=num_words;n>=0;n--){ 
     printf("%s",all_words[n]); 
    } 

for(i =1;i<=testcases;i++){ 
    num_words = 0; // New test case so start from zero 

はまた、この部分に問題があります。

試してみてください。

for(n=num_words-1;n>=0;n--){  // Notice the -1 
     printf("%s ",all_words[n]); // Notice the space 
    } 

もう一つの問題は、あなたが最後の言葉コピーしたことがないということです。

while((value = getwords(oneword))!=1){ 
     strcpy(all_words[num_words],oneword); 
     // .... 
    } 

ので、あなたの関数の戻り値1は、あなたが欲しいたぶんstrcpy

を実行することはありません次のようなもの:

while((value = getwords(oneword))!=1){ 
     strcpy(all_words[num_words],oneword); 
     // .... 
    } 
    strcpy(all_words[num_words],oneword); // Copy last word 
    num_words++; 
+0

それは前と同じことを行うことはありません。それはちょうどn単語のn番目の用語を選んでいません。 – coder

+0

@coder - アップデートを参照 – 4386427

関連する問題