0

我有一个来自 C++ 教科书的简单示例,它定义了一个 C 字符串,然后循环以用 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 进行比较的问题。我不认为我正在尝试将指针与整数进行比较......

4

5 回答 5

3

您需要在两个地方使用单引号。

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

由于您有双引号,因此它被视为字符串文字。

于 2013-03-13T08:35:31.493 回答
2

更改"\0"'\0'。第一个是衰减为指针的字符串文字,正如编译器告诉您的那样,您不允许将指针与整数进行比较。后者是一个普通的旧字符文字。

同理,ourString[index] = "X";改成"X"'X'

最后一行应该是cout << ourString << endl;;

于 2013-03-13T08:34:51.160 回答
1

您将字符与字符串混淆了。您需要切换"\0"to'\0'"X"to '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;
于 2013-03-13T08:35:08.603 回答
1

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

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

将双刻度替换为单刻度。

于 2013-03-13T08:39:10.970 回答
1

您使用了空运算符,它不与双引号 "" 一起使用,它始终与单引号 '\0' 一起使用

尝试这个,,

  while(ourString[index] != '\0')
于 2013-03-13T10:09:56.643 回答