从字符串向量中获取字符串的第一个字符
get first character of a string from a string vector
如何在遍历字符串向量时获取第一个字符或如何通过索引从字符串向量中获取字符。
这是我的代码:
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0]==ch)
cout<<"output";
}
出现错误:
'operator==' 不匹配(操作数类型为 'std::basic_string' 和 'char')|
要获取向量索引 k
处的字符串,以下代码应该有效:
vector<string>::iterator i = vec.begin();
while (i != vec.end())
{
if (i - vec.begin() == k)
cout << (*i) << endl;
++i;
}
要从该字符串中获取字符,您可以在适当的位置取消引用。
尝试以下方法
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0][0] == ch)
cout<<"output";
++i;
}
i[0]
returns 迭代器 i 指向的整个字符串,而 i[0][0]
returns 字符串的第一个字符,即使字符串为空(在本例中该值将为“\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; });
i
是序列 中的迭代器,而不是序列 的 元素。 i
就像一个指针;你需要做 *i
来获取迭代器指向的元素。例如(*i)[0]
是 i
指向的字符串的第一个字符(假设它是非空的,当然——如果它是空的,那么这是未定义的行为,各种可怕的事情都可能发生)。
此外,您似乎忘记了实际遍历您的序列;例如在每次迭代结束时以 ++i
前进。
不过,除非您特别需要使用迭代器,否则您应该更喜欢
for(std::string &s : vec) {
// do something with s
}
(或更简单地说,auto &s : vec
)
如何在遍历字符串向量时获取第一个字符或如何通过索引从字符串向量中获取字符。 这是我的代码:
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0]==ch)
cout<<"output";
}
出现错误:
'operator==' 不匹配(操作数类型为 'std::basic_string' 和 'char')|
要获取向量索引 k
处的字符串,以下代码应该有效:
vector<string>::iterator i = vec.begin();
while (i != vec.end())
{
if (i - vec.begin() == k)
cout << (*i) << endl;
++i;
}
要从该字符串中获取字符,您可以在适当的位置取消引用。
尝试以下方法
vector<string>::iterator i=vec.begin();
while(i!=vec.end()){
if(i[0][0] == ch)
cout<<"output";
++i;
}
i[0]
returns 迭代器 i 指向的整个字符串,而 i[0][0]
returns 字符串的第一个字符,即使字符串为空(在本例中该值将为“\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; });
i
是序列 中的迭代器,而不是序列 的 元素。 i
就像一个指针;你需要做 *i
来获取迭代器指向的元素。例如(*i)[0]
是 i
指向的字符串的第一个字符(假设它是非空的,当然——如果它是空的,那么这是未定义的行为,各种可怕的事情都可能发生)。
此外,您似乎忘记了实际遍历您的序列;例如在每次迭代结束时以 ++i
前进。
不过,除非您特别需要使用迭代器,否则您应该更喜欢
for(std::string &s : vec) {
// do something with s
}
(或更简单地说,auto &s : vec
)