将字符串中的元素与C ++中的length-1字符串进行比较

时间:2018-06-18 19:36:52

标签: c++ types

我很抱歉这个简单的问题,但我不明白为什么这个简单的程序不起作用。

a[0]应该是"a"以外的其他内容?

#include <iostream>

using namespace std;

int main(){

    string a = "abcd";
    string b = "a";


    if (a[0]==b){//<------problem here
        cout << a << endl;
    }

    return 0;
}

返回错误

  

不匹配'operator =='(操作数类型为'char'和'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string&lt; char&gt;}')

或只是使用string c=a[0];会返回错误:

  

从'char'转换为非标量类型'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string&lt; char&gt;}''

PS:在尝试了一些事情之后,如果我比较a[0]==b[0]或分配c[0]=a[0],我可以让它工作,因为那些现在肯定是同一类型,但我仍然想知道是什么在C ++中进行子串与另一个字符串比较的标准和/或最快方法是。

3 个答案:

答案 0 :(得分:6)

您应该使用 std :: string :: find 来查找子字符串。在字符串上使用下标运算符返回单个字符(标量),而不是字符串(向量,非标量);因此,它们不是同一类型,也没有明确的比较。

您也可以使用 std :: string :: substr 来选择一个可以直接与另一个字符串进行比较的子字符串。

示例

trans = str.maketrans('\u0412\u0432', 'BB')
print('вВВв'.translate(trans))
# 'BBBB'

<强>参考

http://en.cppreference.com/w/cpp/string/basic_string/find
http://en.cppreference.com/w/cpp/string/basic_string/substr
http://en.cppreference.com/w/cpp/string/basic_string

答案 1 :(得分:3)

  

什么是[0]应该不是“a”?

这是'a'而非"a",而且是char。您无法将charstring进行比较,因为它们的类型不同。但你可以做的是从你的字符串中提取一个长度为1个字符的子字符串:

if (a.substr(0,1)==b)...

然后您将"a""a"进行比较,因为.substr会返回string而不是char,即使长度为1。

如果您正在使用#include <string>,请不要忘记std::string

答案 2 :(得分:0)

a[0]是一个字符,其值为'a',而b是一个字符串,它具有不同的类型。如果定义了operator ==(char, string)(或者使用const和/或ref的某些变体),这将起作用,但至少在C ++标准中没有,所以编译应该< / em>失败。 clang编译器甚至提供了有用的消息,

  

二进制表达式的无效操作数('int'和'string'...

表示您正在比较不同的类型。

尝试将其更改为比较a[0]b[0]The bracket operator is defined for strings, and returns a character,所以你可以这样比较它们。

编辑:这可能看起来好像没有回答问题。 确实回答原始问题; OP事后改变了整个问题(并且有人添加了相应的答案)但原始问题仍然存在于第一段中。如果主持人想要,我会删除答案。