我有一个来自C ++教科书的简单示例,它定义了一个C-String,然后循环以用X替换所有不是\ 0字符的元素。
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进行比较。我认为我不想将指针与整数进行比较......
答案 0 :(得分:3)
您需要在两个地方使用单引号。
while(ourString[index] != '\0')
{
ourString[index] = 'X';
index++;
}
由于您有双引号,因此它被视为字符串文字。
答案 1 :(得分:2)
将"\0"
更改为'\0'
。第一个是衰减到指针的字符串文字,正如编译器告诉你的那样,你不允许将指针与整数进行比较。后者是一个普通的旧字符文字。
ourString[index] = "X";
也是如此,将"X"
更改为'X'
。
最后一行应为cout << ourString << endl;
;
答案 2 :(得分: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 :(得分:1)
replace while(ourString[index] != "\0")
带
while(ourString[index] != '\0')
将双刻度替换为单刻度。
答案 4 :(得分:1)
你使用了一个空操作符,它不用于双引号“”它总是用单引号'\ 0'
试试这个,
while(ourString[index] != '\0')