如何在迭代字符串向量时获取第一个字符或按索引获取一个字符。以下是我的代码:
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0]==ch)
cout<<"output";
}
出现错误:
没有匹配的'operator=='(操作数类型为'std::basic_string'和'char')|
请尝试以下方法
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0][0] == ch)
cout<<"output";
++i;
}
i[0]
返回指针i所指向的整个字符串,而i[0][0]
返回该字符串的第一个字符,即使该字符串为空(此时值为“\0”)。
但是您可以更简单地写。
for ( const std::string &s : vec )
{
if ( s[0] == ch ) cout << "output";
}
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if( index < i[0].size() && i[0][index] == ch)
cout<<"output";
++i;
}
或者
for ( const std::string &s : vec )
{
if ( index < s.size() && s[index] == ch ) cout << "output";
}
(*i)
而不是i[0]
。同样,i->size()
。 - user1084944while
语法时,你漏掉了 ++i;
。 - Jérôme不必在这里编写循环,我会使用一个标准算法。例如,要显示以指定字母开头的所有字符串(每行一个),可以使用以下代码:
std::copy_if(vec.begin(), vec.end(),
std::ostream_iterator<std::string>(std::cout, "\n"),
[ch](std::string const &s) { return s[0] == ch; });
k
处的字符串,可以使用以下代码:vector<string>::iterator i = vec.begin();
while (i != vec.end())
{
if (i - vec.begin() == k)
cout << (*i) << endl;
++i;
}
vec[k]
而不是整个代码块? - Juliancout << vec[k] << endl;
。 - gla3dri
是您的序列中的迭代器,而不是序列中的元素。 i
就像一个指针;您需要执行*i
才能获取迭代器指向的元素。例如,(*i)[0]
是i
指向的字符串的第一个字符(当然,假设它是非空的——如果为空,则这是未定义行为,可能会发生各种可怕的事情)。
此外,您似乎忘记了实际迭代您的序列;例如,在每次迭代结束时使用++i
进行推进。
但是,除非您专门需要使用迭代器,否则您应该更喜欢类似以下内容的东西:
for(std::string &s : vec) {
// do something with s
}
auto &s : vec
)
for
循环替换您的while
循环,例如for( const string& s : vec ) { if( s.length() > 0 && s[0] == ch )
。 - Cheers and hth. - Alf