2013-03-13 54 views
0

我已經從++教科書限定C-字符串一個C一個簡單的例子,並隨後循環至替代所有不屬於\ 0字符與X.錯誤與C-字符串工作

char ourString[5] = "Hi"; 
int index = 0; 
while(ourString[index] != "\0") 
{ 
    ourString[index] = "X"; 
    index++; 
} 

cout << ourString[] << endl; 

然而元素當我編譯和運行我得到以下錯誤:

C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp||In function 'int main()':| 
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|17|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]| 
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|19|error: invalid conversion from 'const char*' to 'char' [-fpermissive]| 
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|23|error: expected primary-expression before ']' token| 
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===| 

我不明白爲什麼它不會讓我的問題(據我可以理解的錯誤),比較它們的字符元素,人物\ 0。我不認爲我在試圖比較一個整數的指針...

回答

2

更改"\0"'\0'。第一個是字符串文字,會衰減到一個指針,正如編譯器告訴你的,你不允許將指針與整數進行比較。後者是一個普通的舊字符文字。

ourString[index] = "X";也一樣,"X"更改爲'X'

最後一行應該是cout << ourString << endl;;

1

你讓人物與字符串混淆。您需要將"\0"切換爲'\0'"X"'X'。此外,你不應該在cout語句中使用[] - 結合這些給出:

char ourString[5] = "Hi"; 
int index = 0; 
while(ourString[index] != '\0') 
{ 
    ourString[index] = 'X'; 
    index++; 
} 

cout << ourString << endl; 

注意,您可以在簡潔的形式寫:

for(char* c = ourString; *c ; ++c) // *c is the same as *c!='\0' 
{ 
    *c='X'; 
} 
cout << ourString << endl; 
3

您需要在兩個地方使用單引號。

while(ourString[index] != '\0') 
{ 
    ourString[index] = 'X'; 
    index++; 
} 

由於您有雙引號,因此將其視爲字符串文字。

1

replace while(ourString[index] != "\0")

while(ourString[index] != '\0')

單更換成雙層蜱。

1

您使用空操作,它不與雙引號使用「」它總是用單引號「\ 0」

用來試試這個,,

while(ourString[index] != '\0')