2017-03-07 51 views
0

我在C++中工作,所以我開始製作一個系統,在一個二維字符數組中打開一個句子。在我努力解決問題之後,我得到了它的工作,但沒有按照它的設想。我遇到了字符處理的問題

#include <iostream> 
#include <cstring> 

using namespace std; 

void backword(char* input, char* output[]) 
{ 
    for(int i = 0, c = 0; strlen(input)>i; i++) 
    { 
     if(input[i] == ' ') 
     { 
      c++; 
      i++; 
     } 
     output[c] += input[i]; 
    } 
    cout << output[1]; //debug 
} 

int main() 
{ 
    char** output = new char*[30]; 
    backword("dfs sdfsdfsd dsffsdf", output); 
    cout << output[1]; //dubug 
    return 0; 
} 

所以什麼問題?:它不顯示任何東西,我的調試之後,似乎我的數組沒有改變

更多細節:此代碼我在Visual Studio中嘗試過,沒有工作,試圖Code :: Blocks,結果相同。最初是爲了返回一個指針char **,但是我從這個方法開始,並沒有發生任何編譯錯誤。

P.S:對不起,如果這是一個愚蠢的錯誤,但我沒有以這種方式使用字符。

謝謝。

+2

你永遠不分配在'output'舉行的指針的內存。 –

+2

由於這是C++,你不應該使用原始字符指針,但你應該用'的std :: string'工作。你的方式更像C方式。你忘了提及你的程序應該做什麼。 –

+0

我想你在cout << * output [1]行缺少解引用。 // debug',然後你傳遞臨時對象到函數,我認爲它在函數完成後被銷燬,並且我不確定是否有內存分配...... –

回答

1

我不知道我是否正確理解問題。看起來你正在試圖把這個句子分解成一組單詞。

有點奇怪,你沒有使用C++提供的字符串函數,但可以說你有理由這樣做。

如果要拆分句子,你應該做這樣的事情:

免責聲明:本解決方案適用於字比30個符號,在一句不到30個字短,內存損壞,否則......

void backword(char* input, char output[][30]) 
{ 
    int index_c = 0; 
    int c = 0; 
    for (int i = 0; strlen(input) > i; i++) 
    { 

     if (input[i] == ' ') 
     { 
      c++; 
      index_c = 0; 
     } 
     else 
      output[c][index_c++] = input[i]; 
    } 

    cout << output[1]; //debug 
} 

int main() 
{ 
    char output[30][30]; 
    memset(output, 0, sizeof(output)); 
    backword("dfs sdfsdfsd dsffsdf", output); 
    cout << output[1]; //dubug 
    return 0; 
} 

但我認爲你更好地利用字符串....

+0

完全不起作用,更正此答案或將其刪除之前將其刪除。如果一個單詞有超過30個字母會發生什麼? –

+0

好吧,它測試和工作,當然限制30個符號,如果在用戶的問題和用戶必須注意它... –

+0

您的解決方案的預期輸出是什麼? –