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

时间:2014-11-25 02:54:46

标签: c++ string c++11 vector

如何在a中对矢量< 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], "String\n"){    // The error is here
                    pdat.push_back(dat[b]);
            }
    }

my.cpp:在函数'std :: vector&gt;中ngr()':
my.cpp:53:32:错误:无法转换'__gnu_cxx :: __ alloc_traits&gt; &gt; :: value_type {aka std :: basic_string}'到'const char *'用于参数'1'到'int strcmp(const char *,const char *)'

3 个答案:

答案 0 :(得分:4)

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

if (dat[b] == "String\n") {

如果您正在处理C ++字符串,则不需要string.h中的任何str *函数,因此您可能根本不包含它。

答案 1 :(得分:1)

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

if(dat[b] == "String\n"){    //
    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(), "String\n") 
...

答案 2 :(得分:0)

strcmp()预计有2 const char*个,但dat[b]string,因此您不会将苹果与苹果进行比较。

你可以做

if(!strcmp(dat[b].c_str(), "String\n"){

或者

if (dat[b] == "String\n") {

第二种是更多的C ++方法。