2013-02-16 176 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字节)终止只是字节阵列。