C++不会让我比较指针和整数



所以我正在学习C++,我正在尝试学习如何操作字符串等,在这个代码段中,我希望呈现一个没有空格的特定字符串:

#include <iostream>
#include <string>
using namespace std;
int main() {
    string intro = "Hello my name is John";
    for(string::iterator it = intro.begin(); it != intro.end(); ++it) {
        if((*it) != " ") {
            cout << *it;
        }
    }
    return 0;
}

完全忘记了我在这里做错了什么。谁能帮忙?我没有使用任何整数,错误说"ISO C++禁止指针和整数之间的比较"

问题是" "(双引号)不是单个空格字符。它是一个字符串文本,由空格字符和 null 终止符组成。

字符串文字的类型是 const char[] ,它衰减成一个const char*进行比较。另一方面,单个char是数字类型,它被提升为int进行比较。这就是编译器告诉您正在尝试将指针与 int 进行比较的原因。

您需要将" "替换为' '(单引号),这是一个单引号char,以便您的程序进行编译。

您正在尝试将单个字符与整个字符串进行比较。

我假设你只想将*it给出的字符与单个字符进行比较,空格?然后你应该改为做*it == ' '.请注意使用引号来表示字符文本。


至于"整数"的东西,在算术表达式(比较是)中,编译器将小于 int 的类型转换为int,因此字符类型char会自动转换为具有相同值的int,然后您在与字符串文字" "给出的指针进行比较时使用该int值。

*it将返回std::string的元素,即char" "是类型为const char[2](空格和空字符)的字符串文字,它可能会衰减到const char*,即指针。它们的类型不匹配。

你应该改变

if((*it) != " ") {

if((*it) != ' ') {

它之所以有效,是因为' '也是一个字符。

一个简短的答案。

*it是一个char小整数),因为您正在迭代一个std::string,这是一个char序列。

" "是一个const char *(空格字符后跟 NULL 终止符)。

因此,您将整数与此处的指针进行比较:

if((*it) != " ") {

这是原因:

"ISO C++禁止在指针和整数之间进行比较"

" " 替换为 char ' ',即(小整数)32。

我所说的小整数是指类似于 int8_t ,一个 8 位整数。因人而异。

最新更新