2013-02-16 58 views
-1

出於某種原因,我無法使其工作!有誰能告訴我我哪裏出了問題嗎?這應該扭轉在給字符串的話(即從「這是一個測試」,以「測試是這樣的」)字符串中的反向字

#include <stdio.h> 
#include <stdlib.h> 

char *reverse(char const *input) 
{ 
    char *ret = (char *)malloc(sizeof(char) * strlen(input)); 
    int length = 0; 
    int numWords = 1; 
    int i; 
    for(i=0; input[i]!=NULL; i++) 
    { 
     length++; 
     if(input[i]==' ') 
      numWords++; 
    } 
    char words[numWords]; 
    int currentWord = numWords; 
    for(i=0; input[i]!=NULL; i++) 
    { 
     if (input[i]==' '){ 
      currentWord--; 
     }else{ 
      words[currentWord] = words[currentWord] + input[i]; 
     } 
    } 
    for(i=0; i < numWords; i++) 
    { 
     ret = ret + words[i]; 
    } 

    return ret; 
} 

int main(int argc, char **argv) 
{ 
    int nTestcase = 0; 
    int i = 0; 
    char inputstr[100]; 
    char *reversedStr = NULL; 
    scanf("%d\n", &nTestcase); 
    for (i = 0; i < nTestcase; i++) 
    { 
     fgets(inputstr, 100, stdin); 
     reversedStr = reverse(inputstr); 
     printf("%s\n", reversedStr); 
     free(reversedStr); 
     memset(inputstr, 0, 100); 
    } 
    return 0; 
} 
+0

您有具體問題嗎?哪部分不起作用? – 2013-02-16 04:29:46

+0

你的代碼中的這一行是什麼意思[currentWord] = words [currentWord] + input [i]; ???你正在添加兩個字符,並將其存儲在另一個! – 999k 2013-02-16 04:38:37

+0

看起來太複雜了。你爲什麼關心字數?從最後開始,向後掃描尋找空間;當你找到一個空格時,打印字符串後面的字符部分,並在下一個空格之前結束。 – Caleb 2013-02-16 04:42:31

回答

1
words[currentWord] = words[currentWord] + input[i]; 

不能人物彼此像預期增加字符串連接。我想你預計words是一個單詞(即字符串)的數組,但它的類型不是這樣,words只是一個字符數組。

像@湯姆說,你在最後再次做這個循環:

ret = ret + words[i]; 
+2

在last for loop中,他還使用'+'作爲concatenation-ret = ret + words [i] – 999k 2013-02-16 04:45:56

0

約瑟夫,不像其他的編程語言(C#或PHP),C的字符串處理函數是很基本的。

您不能直接添加字符串,但是可以使用許多庫函數來完成相同的任務。

退房,

  • strtok的 - 用它來分割字符串的話。 strtok reference

  • strncat函數 - 用於連接字符串

字符串C是與空字符(具有值0字節)終止只是字節陣列。