2014-12-30 197 views
0

似乎是字符串切片文本[i]有問題,那有什麼問題?在Eclipse從'char'到'const char *'無效轉換

錯誤顯示出來

invalid conversion from ‘char’ to ‘const char*’ [-fpermissive] test.cpp /Standford.Programming line 17 C/C++ Problem 

代碼

string CensorString1(string text, string remove){ 
    for (int i=0;i<text.length();i++){ 
     string ch = text[i]; 
    } 
} 
+1

你想* * 1,煤焦該循環中的長度爲「std :: string」?目前還不清楚你是想要一個單一字符的「std :: string」還是隻需要一個「char」。也許可以通過const-ref傳遞這些參數,並且給你一個內存總線一個小休。 – WhozCraig

+0

你爲什麼認爲這不是錯的?你知道'char'是什麼,和'char *'有什麼區別嗎? 'const'只是一個修飾符,編譯器告訴你兩個項目有不同的類型。當你試圖解釋預期的行爲時,這變得很清楚。試着問這一步。 – harper

回答

1

這條線的問題是:

string ch = text[i]; 

text[i]char不是string。您正在索引到text請記住,如果text equals "sometext"i equals 3 - text[i]表示e。將上面的代碼更改爲:

char ch = text[i]; 

使用str.push_back(ch)來追加。閱讀關於std::string::push_back

將字符c追加到字符串末尾,將其長度增加1。

+0

如果我寫字符串ch = string(text [i]),它也不起作用 –

+0

@Hellolad - 爲什麼要將char轉換爲字符串? – Sadique

+0

我想使用str.append(ch) –

0
text[i] 

返回一個char - 所以你應該使用:

char c = text[i]; 

否則編譯器將嘗試從char構建string,它只能 「轉換」 一const char *作爲字符串雖然。這就是錯誤信息的原因。

0

從你的函數的名字,我想你要做到這一點...

#include <string> 
using std::string; 
string CensorString1 (string text, string const & remove) { 
    for(;;) { 
     size_t pos = text.find(remove); 
     if (pos == string::npos) break; 
     text.erase(pos,remove.size()); 
    } 
    return text; 
} 

...或者說:

#include <string> 
using std::string; 
string CensorString1 (string text, string const & remove) { 
    size_t pos = text.find(remove); 
    if (pos != string::npos) text.erase(pos,remove.size()); 
    return text; 
} 
相關問題