在向量上使用strcmp

时间:2016-05-02 02:39:26

标签: c++ string char strcmp

我有一个字符串向量,我想比较矢量的第一个元素和一堆不同的"字符串"。

这就是我想要做的事情:

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 *"存在所以我知道它不喜欢我做一个字符串到字符比较,但我无法弄清楚如何正确地做到这一点。

3 个答案:

答案 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::stringchar 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。