Проблемы с длиной строки C ++ - PullRequest
1 голос
/ 29 апреля 2011

поэтому я практикую класс строки STL, но я не могу понять, почему функция string-> length не даст правильный ответ 5 и только 2 (независимо от фактической длины). Вот программа, которую я пытаюсь запустить, но она думает, что между -> начало и -> конец есть только 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 ]

3 голосов
/ 29 апреля 2011

Вы перебираете первую строку, которая называется «Привет» - она ​​состоит из двух символов, поэтому вы видите две записи.

Если вы хотите использовать все 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;
}
3 голосов
/ 29 апреля 2011

Проблема с выражениями:

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

Думая о a->b, как и (*a).b, мы можем видеть, что они:

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

*x совпадает с x[0], поэтому мы имеем:

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

Поскольку _string[0] содержит "Hi", вы можете понять, почему итерация состоит всего из двух шагов.

0 голосов
/ 29 апреля 2011

Проблема в том, что вы пытаетесь перебрать массив AC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...