如何将字符串与向量值进行比较

How do you compare a string to a vector value?

本文关键字:比较 向量 字符串      更新时间:2023-10-16

如何在 a 中与 vector<std::string> 中的值进行字符串比较?

我尝试了str,错误打印在下面。

.....

    vector<std::string> dat;
    vector<std::string> pdat;
    dat = my();
    for(int b = 2; b < dat.size(); b+=7){
    //      cout << dat[b] << " " << endl;
            if(!strcmp(dat[b], "Stringn"){    // The error is here
                    pdat.push_back(dat[b]);
            }
    }

my.cpp: 在函数 'std::vector> ngr()' 中:
my.cpp:53:32:错误:无法将参数"1"的"__gnu_cxx::__alloc_traits>>:value_type {aka std::basic_string}"转换为"const char*",用于参数"1"到"int strcmp(const char*,const char*)"

std::string与普通==进行比较。这是有效的,因为 == 运算符重载以对 std::string s 进行字符串比较。

if (dat[b] == "Stringn") {

如果你正在处理C++字符串,你不应该需要 string.h 中的任何 str* 函数,所以你最好根本不包含它。

只需使用 operator== on 来比较std::stringconst char*

if(dat[b] == "Stringn"){    //
    pdat.push_back(dat[b]);
}

作为记录,这里使用的确切重载是函数模板:

template< class CharT, class traits, class Alloc >
bool operator==( const basic_string<CharT,Traits,Alloc>& lhs, const CharT* rhs );

strcmp(你在这里不需要,在C++中很少需要)期望const char*参数:

int strcmp( const char *lhs, const char *rhs );

所以你可以(但不应该)在c_str()成员函数的帮助下调用它:

if(!strcmp(dat[b].c_str(), "Stringn") 
...

strcmp()期望 2 const char* 秒,但dat[b]string,所以你不是在比较苹果和苹果。

你可以做

if(!strcmp(dat[b].c_str(), "Stringn"){

if (dat[b] == "Stringn") {

二是比较C++的方法。