所以我正在学习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;
答案 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)
一个简短的回答。
*it
是char
(小整数),因为您正在迭代std::string
char
的序列。
而" "
是const char *
(空格字符后跟NULL终结符)。
所以你在这里比较整数和指针:
if((*it) != " ") {
原因如下:
&#34; ISO C ++禁止在指针和int&#34;
之间进行比较
将" "
替换为char
' '
,即(小整数)32。
小整数我的意思是int8_t
,一个8位整数。它各不相同。