为什么我不能将char与“*”进行比较?

时间:2017-08-24 04:49:32

标签: c++

为什么我无法将UserInput[i]"*"进行比较?编译器说“ISO c ++禁止指针和整数之间的比较”。整数在哪里?我在该行上看到的唯一一个是i,用于定位特定字符。

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int main(){
    char UserInput[4] = "2*3";
    for (int i=0; i< strlen(UserInput); i++)
    {
        if(UserInput[i] == "*")
        {
            cout<<"There is multiplication Involved \n";
        }
    }
    return 0;
}

4 个答案:

答案 0 :(得分:5)

  

整数在哪里?

您的条件表达式为UserInput[i] == "*"

表达式UserInput[i]的类型为char。在许多二进制操作中,char在执行操作之前被提升为int。就编译器而言,它将int"*"进行比较,const char[2]类型为char,但衰减到表达式中的指针。

您需要做的是将'*'与字符常量if(UserInput[i] == '*') { 进行比较。使用

form-group

答案 1 :(得分:2)

if(UserInput[i] == "*")
  

因为“”

会发出警告

"*"不是char。 "*"const char*

指针和整数(intconst char *)之间的比较是不可能的

将其更改为

if(UserInput[i] == '*')

答案 2 :(得分:1)

此外,使用std::string代替char数组

#include <iostream>
#include <string>
using namespace std;

int main() {
    string UserInput = "2*3";
    for (int i = 0; i < UserInput.length(); i++) {
        if (UserInput[i] == '*') {
            cout << "There is multiplication Involved \n";
        }
    }
    return 0;
}

答案 3 :(得分:0)

这有点棘手。
所有内容 都是字符串 - 字符数组。 c / c ++中的数组是指向数组第一个元素的指针 string的每个元素都是char,它被转换为int 最后,编译器说不可能比较这两个项目。 你需要这样做:

if(UserInput[i] == '*')

在这种情况下,你可以比较两个字符没有问题。

PS 如果您想确定另一个字符串中是否存在一个字符串,则应使用strstr()