2013-02-16 6 views
-1

웬일인지, 나는 이것을 작동시킬 수 없다! 아무도 내가 잘못한 곳을 말해 줄 수 있습니까? 이것은주고 문자열의 단어를 반대하도록되어 (즉, "테스트 A는 이것이다"에서 "테스트입니다"에서) 당신이 기대처럼 서로 문자를 추가 할 수 없습니다문자열의 역 단어

#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

특정 질문이 있으십니까? 어느 부분이 작동하지 않습니까? –

+0

코드 단어 [currentWord] = 단어 [currentWord] + 입력 [i]에서이 행의 의미는 무엇입니까? ??? 너는 2 개의 특성을 추가하고 또 다른 한개 안에 그것을 저장하고있다 !! – 999k

+0

너무 복잡해 보입니다. 왜 단어의 개수에 관심이 있으십니까? 끝에서 시작하여 뒤로 검색하여 공백을 찾습니다. 하나를 찾으면 공백 다음의 문자로 시작하여 다음 공백 전에 끝나는 문자열 부분을 인쇄하십시오. – Caleb

답변

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

은 문자열 연결. 그리고 words이 단어 (즉, 문자열)의 배열이 될 것이라고 예상하지만 그 유형은 그렇지 않습니다. words은 문자 배열입니다.

체감 @ 톰은 루프의 마지막에 다시이 일을하고, 말했다 :

ret = ret + words[i]; 
+2

for last for 루프 또한 concatenation- ret = ret + words [i]에 '+'를 사용하고 있습니다. – 999k

0

조셉, 다른 프로그래밍 언어 (C# 또는 PHP)과는 달리, C의 문자열 처리 기능은 아주 기본입니다.

문자열을 직접 추가 할 수는 없지만 동일한 작업을 수행하는 데 사용할 수있는 많은 라이브러리 함수가 있습니다.

체크 아웃,

  • strtok를 - 단어 문자열을 분할하는 데 사용합니다. strtok reference

  • 함수 역시 - 사용은 C에서 문자열

문자열을 연결하기는 널 문자 (값이 0 바이트) 종료 단지 바이트 배열입니다.