2012-09-03 78 views
1

我的代碼在下面有問題,我想顛倒一個字符串,但是我運行時錯誤,誰能幫我檢查一下?問題是:
如:用C語言逐字顛倒一個字符串的字

輸入:字符* S = 「這是我的字符串」

OUTPUT: 「字符串我是這樣的」

#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

不能修改這個字符串:

char *s = "This is my string"; 

您已經聲明不正確,它應該是

const char* = "This is my string"; 

通常,這些字符串分配在您無法寫入的內存區域中。您應該創建另一個緩衝區來寫入反向字符串。

+2

不需要另一個緩衝區,只需將's'改爲數組。 'char s [] = ...' – interjay

+2

@interjay - 或那... – Nim