当前位置: 首页 > 知识库问答 >
问题:

C运算符“==”无法将字符串[i]与另一个字符串进行比较。编译错误

侯兴为
2023-03-14
#include <iostream>
using namespace std;

int main()
{
    string str = "abcdef";
    string x = "a";
    if (str[0] == x) {
        //do something...
    }
    return 0;
}

并且无法编译。

“错误:“operator==”(操作数类型为“\uu gnu\u cxx::\uu alloc\u traits,char

共有3个答案

巫新知
2023-03-14
匿名用户

您正在询问为什么您的代码无法编译。

如果我们逐行查看您的代码,我们可以看到。。。

string str = "abcdef";
string x = "a";
if (str[0] == x)

从上面的第一行,您声明了一个字符串str,它存储{a、b、c、d、e、f}的字符编码值集,可以是ASCII、UTF-X等。

在第二行声明另一个字符串,该字符串存储{a}的字符编码值集,可以是ASCII、UTF-x等。

直到if语句中的表达式出现时,才出现不编译的问题。

表达式的LHS使用std::string运算符[]访问其在内存中第一个位置的索引处的值。这将返回对该索引位置的字符的引用。然后在表达式的RHS上,您将LHS字符引用与名为xstd::string进行比较。

这里的问题是,char的引用和std::string之间没有转换,而且您还没有定义自己的操作符==()。

最简单的修复方法是将左侧更改为字符串,或将右侧更改为字符。STL中也可能有可用的函数或算法,可以为您进行比较。你可以在线搜索。

您可以参考cppreference:string:basic\u string:operator\u at了解有关字符串的详细信息。您可以在他们的网站上搜索其他函数、算法、字符串操纵器和其他类型的容器。它可能是最适合C/C的资源之一。

刘成礼
2023-03-14

这里的问题是,您将字符与字符串进行比较

str[0]实际上是一个char

只需将x声明为字符。。。

#include <iostream>
using namespace std;

int main()
{
    string str = "abcdef";
    char x = 'a';
    if (str[0] == x) {
        //do something...
    }
    return 0;
}
毕霖
2023-03-14

除了作为字符串之外,string还提供了作为char的容器的接口。因此,当您使用操作符[]时,您可以从该容器访问并分离char,并且不能将char与字符串进行比较。如果要使用单个符号字符串,请使用长度为1的std::string::substr()。或者,如果要将符号与另一个符号进行比较,请将其声明为单个字符,而不是字符串。

 类似资料:
  • 问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的

  • 如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="

  • 问题内容: 这个问题已经在这里有了答案 : Python If == true语句仅在readline的最后一行有效 (1个答案) 2年前关闭。 我试图将我的一行与一个字符串进行比较,但是这行不通。我正在读取一个html文件,我需要解析该文件以将该部分发送到字典,但是当我使用if将行之一与字符串进行比较时,匹配时不会返回True。 这是代码: 问题答案: 我认为这是因为它尝试读取字符串中的换行符:

  • 问题内容: 我从书中看到以下代码: 但没有提到为什么“一个”大于“四个”。我试过了,它小于a和b。我想知道JavaScript如何比较这些字符串。 问题答案: 因为和许多编程语言一样,字符串是按字典顺序进行比较的。 你可以认为这是一个空想家版本的字母顺序,区别在于字母排序仅覆盖了26个字符通过。

  • 我试图编写一个程序,其中我必须做与模板(本质上是一个字符串)之间的字符串列表的比较。我不知道什么是使用的术语,但它将是更多的日志刮削程序,如果这是有帮助的。 null 这个想法是将输入语句(1-4)与模板字符串(a-b)匹配,如果它们匹配,那么我需要对它们进行操作。Like 1和4匹配句子b,但2不匹配。 提前感谢您的帮助/指示。