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: 打印二维数组的元素。



















