我需要在向量数组中双循环遍历每个字符串的字符,并且不知道语法将如何调用每个元素的每个字符。
答案 0 :(得分:7)
向量[] operator
将返回std::string&
,然后您使用[] operator
std::string
来获取角色(为char&
)。
std::vector<std::string> vec{"hello","world"};
std::cout<<vec[0][3];
正如@RyanP评论的那样,方法std::vector::at
和std::string::at
将执行边界检查,如果您尝试取消引用大于向量的索引,则会抛出异常/字符串大小。
try{
std::cout<<vec.at(0).at(3);
}
catch (std::exception& e){
//handle
}
答案 1 :(得分:0)
因为你需要在向量中迭代字符串,即多次使用它,所以创建一个(const)引用:
std::vector<std::string> vec { "abc", "efg" };
for( size_t i = 0; i < vec.size(); ++i ) {
const auto &str = vec[i];
for( size_t j = 0; j < str.length(); ++j )
std::cout << str[j];
}
否则你必须多次写vec[i][j]
,这太冗长了
答案 2 :(得分:0)
以下显示了不同的方法
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::string> v = { "Hello", "World" };
for ( const auto &s : v )
{
for ( auto c : s ) std::cout << c;
std::cout << ' ';
}
std::cout << std::endl;
for ( auto i = v.size(); i != 0; )
{
for ( auto j = v[--i].size(); j != 0; ) std::cout << v[i][--j];
std::cout << ' ';
}
std::cout << std::endl;
for ( auto it1 = v.begin(); it1 != v.end(); ++it1 )
{
for ( auto it2 = it1->rbegin(); it2 != it1->rend(); ++it2 ) std::cout << *it2;
std::cout << ' ';
}
std::cout << std::endl;
}
程序输出
Hello World
dlroW olleH
olleH dlroW
您可以通过各种方式组合这些方法。
如果要使用基于范围的for语句更改字符串中的字符,则必须按以下方式编写循环
for ( auto &s : v )
{
for ( auto &c : s ) /* assign something to c */;
}