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

get first character of a string from a string vector

本文关键字:字符串 第一个 字符 向量 获取      更新时间:2023-10-16

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

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

它给出了错误:

"operator=="不匹配(操作数类型为"std::basic_string"answers"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";
}

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

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

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

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

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

除非您特别需要使用迭代器,否则您可能更喜欢类似的东西

for(std::string &s : vec) {
    // do something with s
}

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