C ++字符串长度问题

时间:2011-04-29 01:37:47

标签: c++ string stl

所以即时练习STL字符串类,但我无法弄清楚为什么string-> length函数不会得到5的正确答案,只有2(无论实际长度)。这是我正在尝试运行的程序,但它认为只有两个项目 - >开始和 - >结束:

void testFunc(string _string[])
{
      int _offset = 0;
      string::const_iterator i;
      for (i = _string->begin(); i != _string->end(); i++)
      {
           cout << _offset << "\t";
           cout << _string[_offset] << endl;
           _offset ++;
      }
};

int main()
{
     string Hello[] = {"Hi", "Holla", "Eyo", "Whatsup", "Hello"};

     testFunc(Hello);

     char response;
     cin >> response;
     return 0;
}

输出结果为:

0     Hi
1     Holla  

谢谢! =)

3 个答案:

答案 0 :(得分:3)

你正在迭代第一个字符串,这是&#34;嗨&#34; - 它有两个字符,所以你看到两个条目。

如果你想要使用所有STL,你需要一个向量而不是一个C风格的数组(即vector<string>,并在其上使用迭代器。

如果您不想要STL:

    void testFunc(string *strings, int stringCount)
    {
        int _offset = 0;

        while (stringCount--)
        {
            cout << _offset << "\t";
            cout << _strings[_offset] << endl;
            _offset ++;
        }
    };

int main()
{
    string Hello[] = {"Hi", "Holla", "Eyo", "Whatsup", "Hello"};

    testFunc(Hello, sizeof(Hello) / sizeof(Hello[0]));

    char response;
    cin >> response;
    return 0;
}

答案 1 :(得分:3)

问题在于表达式:

_string->begin()
_string->end()

认为a->b(*a).b相同,我们可以看到它们是:

(*_string).begin()
(*_string).end()

*xx[0]相同,因此我们有:

_string[0].begin()
_string[0].end()

由于_string[0]包含"Hi",您可以看到为什么迭代只有两个步骤。

答案 2 :(得分:0)

问题是你正在尝试迭代一个c数组。

相关问题