我很抱歉这个简单的问题,但我不明白为什么这个简单的程序不起作用。
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 ++中进行子串与另一个字符串比较的标准和/或最快方法是。
答案 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
。您无法将char
与string
进行比较,因为它们的类型不同。但你可以做的是从你的字符串中提取一个长度为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事后改变了整个问题(并且有人添加了相应的答案)但原始问题仍然存在于第一段中。如果主持人想要,我会删除答案。