2012-10-17 2 views
0

배열이나 그 내용을 이해하지 못했는지 모르겠지만 지난 두 시간 동안이 코드에서 문제를 찾고있었습니다. 나는 그것을 실행할 때 무한한 수익률을 얻는다.재귀를 사용하여 역순으로 문자열 사용 - C

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

void reverse(char string2Reverse[80], int start, int end); 

int main(int argc, char *argv[]) 
{ 
    char string[80]; 

    int cntr; 
    for(cntr = 0; cntr < 80; cntr++) 
     string[cntr] = '\0'; 

    int start = 0, end; 

    while((scanf("s", string)) != EOF) 
    { 
    end = 0; 
    printf("%s ", string); 

    while(string[end] != '\0') 
     end++; 

    end--; 
    reverse(string, start, end); 
    end++; 
    printf("%s\n\n", string); 

    for(cntr = 0; cntr < end; cntr++) 
     string[cntr] = '\0'; 
    } 
} 

void reverse(char string2Reverse[80], int start, int end) 
{ 
    if(string2Reverse[start] != string2Reverse[end] && start != end) 
    { 
    char temp = string2Reverse[start]; 
    string2Reverse[start] = string2Reverse[end]; 
    string2Reverse[end] = temp; 
    reverse(string2Reverse, start + 1, end - 1); 
    } 
} 

어떤 도움이 좋지 않을까 :

여기에 코드입니다! 내 문제를 찾을 수없는 것 같습니다.

+1

문제를 표시하는 데 필요한만큼만 코드를 제공하면 도움이되는 경우가 종종 있습니다. 여기서 입력을 상수로 대체하는 것이 자동 확인을 어렵게 만들기 때문에 좋은 생각입니다. – pmr

답변

1

scanf의 문자열을 읽는 형식이 %s 인 경우 백분율 기호가 누락 된 것으로 보입니다.

2

만약 end-start가 짝이 맞지 않는다면 시작이 끝날 것이기 때문에 무한 루프가 될 것입니다! = 역시 끝이납니다 .. 실제로는 string2Reverse[start] != string2Reverse[end]을 비교하고 싶다면 알고 있습니다. 문자열에 'a'가 있고 문자열의 반대쪽에 균형이 잡힌 위치에 'a'가 있으면 종료됩니다. 이 시도 : 다른 사람들이 여기에 지적

void reverse(char string2Reverse[80], int start, int end) 
{ 
    if(start < end) 
    { 
    char temp = string2Reverse[start]; 
    string2Reverse[start] = string2Reverse[end]; 
    string2Reverse[end] = temp; 
    reverse(string2Reverse, start + 1, end - 1); 
    } 
} 

이 그리고, 당신이 당신의 scanf와에 "% S"대신 "S"의 필요가 끝이 떨어져 시작하기 때문에, 당신이 지금 반복하는 이유는 -1 (0 len 문자열이므로)은 분명히 시작이 증가하고 끝이 감소하므로 종료 조건이 결코 충족되지 않습니다.

1

while((scanf("s", string)) != EOF)while((scanf("%s", &string)) != EOF)이고 %는 &입니다.

관련 문제