2012-09-03 4 views
1

아래 코드에 문제가 있습니다. 문자열을 뒤집어 썼습니다.하지만 시간 오류가 있습니다. 누가 그것을 확인할 수 있습니까? 문제는 :
는 예 "이 문자열 내 IS"단어로 문자열 단어 바꾸기 C 언어

#include <iostream> 
using namespace std; 

void reverse(char *str, int start, int end){ 
    char tmp; 
    while(end > start){ 
     tmp = str[end]; 
     str[end] = str[start]; 
     str[start] = tmp; 
     end--; 
     start++; 
    } 
} 

int main() 
{ 
    char *s = "This is my string"; 
    int len = strlen(s); 
    int start = 0; 
    int end = len-1; 
    reverse(s, start, end); 
    printf("%s", s); 
    end = 0; 
    while(end < len){ 
     if(s[end] == ' '||s[end] =='\0'){ 
      while(s[start]==' ') 
       start++; 
      reverse(s,start,end-1); 
      start = end; 
     } 
     end++; 
    } 
    printf("%s", s); 
    cin.get(); 
} 
+0

코드가 C 언어가 아닌 C++ 인 것 같습니다. – heretolearn

+1

'main' 함수는 정수를 반환해야합니다. 이는 질문과 관련이 없지만 좋은 코딩 방법입니다. 표준 헤더 stdlib.h는 상수'EXIT_SUCCESS'와'EXIT_FAILURE'를 정의합니다. 이것은'main' (정상적으로 완료하려면'EXIT_SUCCESS', 그렇지 않으면'EXIT_FAILURE')에서 리턴하기위한 좋은 기본값입니다. – sfstewman

답변

3

당신은이 문자열을 수정할 수 없습니다 :

INPUT : =

OUTPUT의 char *의 "이것은 내 문자열"

그것이 있어야 당신은 잘못을 선언 한
char *s = "This is my string"; 

,

const char* = "This is my string"; 

일반적으로 이러한 문자열은 쓸 수없는 메모리 영역에 할당됩니다. 반대의 문자열을 쓸 다른 버퍼를 만들어야합니다.

+2

다른 버퍼를 필요로하지 않고's'를 배열로 변경하십시오. 'char s [] = ...' – interjay

+2

@interjay - 아니면 ... – Nim