C ++不会让我比较指针和int

时间:2016-06-05 11:55:53

标签: c++ string

所以我正在学习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;
}

我完全忘记了我在这里做错了什么。有人可以帮忙吗?我没有使用任何整数,错误说&#34; ISO C ++禁止指针和int之间的比较&#34;

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:4)

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

你应该改变

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

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

它起作用,因为' '也是一个字符。

答案 3 :(得分:0)

一个简短的回答。

*itchar小整数),因为您正在迭代std::string char的序列。

" "const char *(空格字符后跟NULL终结符)。

所以你在这里比较整数和指针:

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

原因如下:

  

&#34; ISO C ++禁止在指针和int&#34;

之间进行比较

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

小整数我的意思是int8_t,一个8位整数。它各不相同。