从字符串向量中获取字符串的第一个字符

时间:2015-03-18 17:47:26

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

如何获取第一个字符或如何通过索引从字符串向量中的字符串获取字符,同时迭代该向量。 这是我的代码:

vector<string>::iterator i=vec.begin();
    while(i!=vec.end()){
        if(i[0]==ch)
            cout<<"output";
    }

它给出了错误:

'operator =='不匹配(操作数类型为'std :: basic_string'和'char')|

4 个答案:

答案 0 :(得分:6)

尝试以下

vector<string>::iterator i=vec.begin();
    while(i!=vec.end()){
        if(i[0][0] == ch)
            cout<<"output";
        ++i;
    }

i[0]返回迭代器i指向的整个字符串,而i[0][0]返回字符串的第一个字符,即使字符串为空(在这种情况下,值将为&#39; \ 0& #39)。 :)

但你可以写更简单的

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";
}

答案 1 :(得分:2)

要获取向量的索引k处的字符串,以下代码应该起作用:

vector<string>::iterator i = vec.begin();
while (i != vec.end())
{
  if (i - vec.begin() == k)
    cout << (*i) << endl;
  ++i;
}

要从该字符串中获取字符,您可以在适当的位置取消引用。

答案 2 :(得分:2)

我没有在这里写一个循环,而是使用标准算法。例如,要显示以指定字母开头的所有字符串(每行一个),您可以使用以下内容:

std::copy_if(vec.begin(), vec.end(), 
             std::ostream_iterator<std::string>(std::cout, "\n"),
             [ch](std::string const &s) { return s[0] == ch; });

答案 3 :(得分:2)

i是序列迭代器,而不是序列的元素i就像一个指针;你需要做*i来获取迭代器所指向的元素。例如(*i)[0]i指向的字符串的第一个字符(假设它是非空的,当然 - 如果它是空的,那么这是未定义的行为,并且可能发生各种可怕的事情)。 / p>

此外,您似乎忘记了实际迭代您的序列;例如在每次迭代结束时以++i推进。

除非你特别需要使用迭代器,否则你应该更喜欢像

这样的东西
for(std::string &s : vec) {
    // do something with s
}

(或更简单地说,auto &s : vec