2014-02-19 92 views
3

我得到一個錯誤代碼:從 '爲const char *' 到 '炭'C++字符串錯誤

std::string zipZap(const std::string& str){ 
    for (unsigned i = 0; i < str.length(); i++){ 
     if (str[i] == 'z'){ 
      if (str[i+2] == 'p'){ 
       str[i+1] = ""; 
      } 
     } 
    } 
    return str; 
} 
+2

函數名稱不能有空格。另外 - 在最內層的if中將''''改爲''''。 –

+1

'std :: string zip zap' o.o that compiles !?另外,調用與某個類型名稱相同的變量並不是一個好主意 – Borgleader

+1

您正在訪問字符超出字符串範圍的字符。你迭代'i'到最後一個字符,如果你使用'str [i]'來訪問這個字符,這很好。但是,你可以使用'str [i + 2]'和'str [i + 1]'來訪問下面的兩個字符,這是無效的(未定義行爲)。 – leemes

回答

1
const std::string& string 

字符串常量,你不能修改它像無效的轉換string[i+1] = "";

+1

即使它是非常量分配指向字符類型的指針也是非法的。 – legends2k

+0

如果是這樣,我該如何修改它?我確實嘗試創建一個新的字符串。例如string a = string;然後使用字符串a。 – user3326237

+0

@ user3326237然後創建新的字符串,* build * it,然後返回它。如果你的字符串中最後兩個字符中的任何一個字符都是'z',你就會調用未定義的行爲。就我個人而言,我只會傳值,修改參數並將其返回。 – WhozCraig

3

常量字符串不能被修改。如果你想修改它的字符串remove const。

,你也被指定字符串爲char串的指數string[i+1] = ""

相反,它應該是string[i+1] = ' 'string[i+1] = '\0'

+0

完成後,它給了我一個錯誤:空字符常量 – user3326237

+0

引用此。它的空間不是空的char引用。 http://ideone.com/2RLHQm – shivakumar

1

關於你的這部分代碼:

str[i+1] = ""; 

你需要保持在請注意,str[i+1]期望單個char acter,但您正在爲其分配一個空字符串,該字符串的類型爲char*

使用str[i+1] = '\0';會給你看起來像是在後面的結果。但爲了成功,您需要在您的功能的頭部更改const std::string& strstd::string& str