C++遍历字符串数组,在main
函数里定义一个字符串数组,要求依次输出字符串元素:
string a[4] = {"a", "vag", "gwe", "gewa"};
希望打印的结果
上面可以看做是二维指针,第一维是每个字符串,第二维是字符串里的字符。给出了五种写法,其中:
- 其中写法1-写法3是两重循环,访问到字符串的第二维(字符)
- 写法4-写法5只有一重循环,访问到字符串的第一维(字符串)。
写法1:两层for循环+下标引用
for (int i = 0; i < 4; ++i)
{
for (int j = 0; a[i][j] != '\0'; ++j)
cout << a[i][j];
cout << " ";
}
写法2:两层for循环+迭代器
for (int i = 0; i < 4; ++i)
{
for (auto beg = a[i].begin(); beg != a[i].end(); beg++)
{
cout << *beg;
}
cout << " ";
}
写法3:两层for循环+标准库函数
for (auto p = begin(a); p != end(a); ++p)
{
for (auto q = begin(*p); q != end(*p); ++q)
{
cout << *q;
}
cout << " ";
}
前面三种方法访问到了数组里的每一个字符,下面的写法直接输出字符串。
写法4:一层for循环+下标引用
for (int i = 0; i < 4; ++i)
cout << a[i] << " ";
写法5:一层for循环+标准库函数
for (auto p = begin(a); p != end(a); ++p)
cout << *p << " ";
不可用的写法
for (auto p = a->begin(); p != a->end(); ++p)
cout << *p << " ";
最后只输出了a
注意:
a.begin()
会有错误a->begin()
会有错误a[1].begin()
无错误
这里面有很多类似多维数组的元素遍历,可以参考我之前的文章《C++ primer》练习3.43-3.45: 打印二维数组的元素。