如何在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 *)'
答案 0 :(得分:4)
std::string
与普通==
进行比较。这是有效的,因为==
运算符被重载以对std::string
进行字符串比较。
if (dat[b] == "String\n") {
如果您正在处理C ++字符串,则不需要string.h中的任何str *函数,因此您可能根本不包含它。
答案 1 :(得分:1)
只需使用operator==
来比较std::string
和const 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 ++方法。