[英]C++ comparing the index of a string to another string?
如何比较一个字符串中的单个字符和另一个字符串(可能大于或小于一个字符)
这个程序给了我近300行随机错误。 错误也没有引用特定的行号,只是有关“ char *”,“”或“ std :: to_string”的很多东西。
#include <iostream>
#include <string>
using std::cout;
using std::string;
int main() {
string str = "MDCXIV";
string test = "D";
if (test == str[4]) { // This line causes the problems
cout << test << endl;
}
return 0;
}
str[4]
是char
类型,不会与string
比较。
比较苹果与苹果。
采用
test[0] == str[4]
代替。
您正在将char与std :: string进行比较,这不是有效的比较。 您正在寻找std :: string :: find,如下所示:
if( test.find( str[4] ) != std::string::npos ) cout << test << "\n";
注意,如果test 包含 str[4]
,它将返回true。
您需要先将str [4](它是一个字符)转换为字符串,然后才能将其与另一个字符串进行比较。 这是一种简单的方法
if (test == string(1, str[4])) {
您正在混合类型。 它不知道如何将字符串( test
)与char( str[4]
)进行比较。
如果您将测试更改为可以正常工作的char
。 或引用您要比较的测试中的特定字符,例如if (test[0] == str[4])
应该编译并运行if (test[0] == str[4])
。
然而,由于这仅仅是一个例子,而不是真正,真正的问题,你会想要做的是看功能的std::string
类用品
另外,如果要像这样进行比较,则需要将"D"
作为字符值而不是字符串值。
std::string myString = "Hello World";
const char *myStringChars = myString.c_str();
您必须先将其转换为char数组,然后才能访问它。 除非你这样做。
str.at(i);
您也可以写成
str[i]
<-您做了什么。
本质上,这一切都归结为测试需要像char test = 'D';
一样初始化char test = 'D';
最终输出
#include <iostream>
#include <string>
using std::cout;
using std::string;
int main() {
string str = "MDCXIV";
char test = 'D';
if (test == str[4]) { // This line causes NO problems
cout << test << endl;
}
return 0;
}
我认为您可能正在将python与c ++混合使用。 在c ++中, 'g'
是指单个字符g
而不是长度为1的字符串。“ g”是指长度为1个字符且看起来像['g']的数组(字符串)。 如您所见,如果将单个字符与一个字符数组进行比较,无论该数组是否为单个字符长,都不会定义此操作。
如果您自己构建一个类,可以将一个字符长的字符串与一个字符进行比较,则可以定义它。 或者只是重载==
运算符即可
例:
#include <iostream>
#include <string>
using std::cout;
using std::string;
using std::endl;
bool operator == ( const string &lh, const char &rh) {
if (lh.length() == 1) return lh[0] == rh;
return 0;
}
int main() {
string str = "MDCXIV";
string test = "D";
if (test == str[4]) {
cout << test << endl;
}
else cout << "Not a match\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.