Как вы разбить массив в C ++? - PullRequest
0 голосов
/ 09 ноября 2010

Я пытаюсь выполнить простую функцию разделения строк, но у меня возникла проблема с возвращением разделенной строки.

Я получил строку в строки s1, s2, s3. как мне вернуть {s1,s2,s3}? я использую скобки, но компилятор говорит мне

expected primary-expression before '{' token 
expected `;' before '{' token 
expected `;' before '}' token 

хотя проблем, похоже, нет. {s1,s2,s3} даже разрешено?

Ответы [ 4 ]

3 голосов
/ 09 ноября 2010

Вы должны заполнить std::vector и вернуть его.

std::vector<std::string> tokenize(/*...*/)
{
    std::vector<std::string> result;

    // ...
    result.push_back(s); // s: s1 - s3
    // ...

    return result;
}

Обратите внимание, что на самом деле у вас не должно быть переменных s1, s2 или s3, или вы простоограничивая процесс тремя выходами.У вас должен быть цикл через строку, помещающий результаты в вектор.

1 голос
/ 09 ноября 2010

Неа. Вы должны поместить свои строки в соответствующий контейнер, который будет возвращен вашей функцией; Вы можете использовать, например, std::vector<std::string>:

std::vector<std::string> YourFunction(/* ... */)
{
    std::vector<std::string> ret;
    // ...
    ret.push_back(s); // you should call this for each string
    // ...
    return ret;
}

Благодаря RVO это не должно быть таким тяжелым, как может показаться.

0 голосов
/ 09 ноября 2010

Вы, вероятно, хотите вернуть тип vector<string>.Затем в вашей функции создайте вектор и верните его как значение.

0 голосов
/ 09 ноября 2010

Это неверный синтаксис вообще. Если у вас есть C ++ 0x, вы можете вернуть std::make_tuple(s1, s2, s3), или, альтернативно (и гораздо более разумно), вы можете просто вернуть std::vector<std::string>.

...