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

问题描述:

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

#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

的不要使用C风格的字符串。 'std :: string'是你的朋友。 –

+1

这个缩进只是......令人讨厌的。 –

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

会发出,因为的警告 “”

"*"是不是char。 "*"const char*。指针和整数(intconst char *)之间

比较是不可能的

改变它

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

在哪里整数?

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

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

您需要做的是将char与字符常量'*'进行比较。使用

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

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

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

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

PS如果要确定是否存在另一个字符串中的一个字符串,应该使用strstr()

+0

为什么这个strncpy(pch,“sample”,6);示例是必需的? –

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

#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; 
}