在向量上使用 strcmp

Using strcmp on a vector

我有一个字符串向量,我想将向量的第一个元素与一堆不同的"strings"进行比较。

这是我想做的:

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)

等..

我可以用什么来做这个比较?编译器抱怨 "no suitable conversion from std:string to "constant char*" exists 所以我知道它不喜欢我做一个字符串到字符的比较,但我不知道如何正确地做到这一点。

'a'不是字符串,是字符常量。您需要使用"a""ah""xyz"

另外,如果要使用strcmp,需要使用:

if (strcmp(myString[0].c_str(), "a") == 0)

您还可以使用重载 operator== 来比较 std::stringchar const*

if (myString[0] == "a")

std::string 重载 operator== 进行字符串比较,因此等同于

if (strcmp(cString, "other string") == 0)

if (cppString == "other string")

所以你的代码变成了(例如)

else if (myString[0] == "ah")

您已将此 post 标记为 C++。

compare the first element of the vector with a bunch of different "strings".

如果我没看错你的 post,向量的第一个元素是 std::string。

std::string 有一个函数和一个运算符用于字符串到字符串的比较。

函数用法如下:

if (0 == pfnA.compare(pfnB))

如cppreference.com所述:

来自 std::string.compare(std::string) 的 return 值是

  • 如果 *this 按字典顺序出现在参数指定的字符序列之前,则为负值

  • 如果 *this 按字典顺序出现在参数指定的字符序列之后,则为正值

  • 如果两个字符序列比较相等则为零

运算符==() 如前所述,return当两个字符串相同时为真。