我有一个字符串向量,我想比较矢量的第一个元素和一堆不同的"字符串"。
这就是我想要做的事情:
if (strcmp(myString[0], 'a') == 0)
但是strcmp不起作用。我基本上想用一堆不同的字符检查myString [0]的内容,看是否有匹配。所以它会像
if (strcmp(myString[0], 'a') == 0){
}
else if (strcmp(myString[0], 'ah') == 0){
}
else ifif (strcmp(myString[0], 'xyz') == 0)
等。
我可以用什么来进行这种比较?编译器抱怨"没有从std:string转换为"常量char *"存在所以我知道它不喜欢我做一个字符串到字符比较,但我无法弄清楚如何正确地做到这一点。
答案 0 :(得分:3)
std::string
重载operator==
来进行字符串比较,因此相当于
if (strcmp(cString, "other string") == 0)
是
if (cppString == "other string")
所以你的代码变成了(例如)
else if (myString[0] == "ah")
答案 1 :(得分:2)
'a'
不是字符串,而是字符常量。您需要使用"a"
,"ah"
,"xyz"
等
另外,如果您想使用strcmp
,则需要使用:
if (strcmp(myString[0].c_str(), "a") == 0)
您还可以使用重载的operator==
将std::string
与char const*
进行比较。
if (myString[0] == "a")
答案 2 :(得分:1)
您已将此帖标记为C ++。
将矢量的第一个元素与一堆不同的元素进行比较 “字符串”。
如果我正确阅读你的帖子,向量的第一个元素是std :: string。
std :: string有一个函数和一个用于字符串到字符串比较的运算符。
该功能用作:
if (0 == pfnA.compare(pfnB))
如cppreference.com中所述:
std :: string.compare(std :: string)的返回值是
负值如果*出现在参数指定的字符序列之前,则按字典顺序
正值如果*出现在参数指定的字符序列之后,按字典顺序
如果两个字符序列都比较等效
如上所述的operator ==(),当两个字符串相同时返回true。