Зачем нам нужно использовать поток при разделении строки? - PullRequest
0 голосов
/ 12 июля 2020

Обратите внимание, я никогда не использовал потоки до сегодняшнего дня, поэтому мое понимание их остается довольно расплывчатым. Приносим извинения, когда говорю что-то ужасно глупое.

Здесь у меня есть небольшой фрагмент кода, который разбивает поток строк на кучу строк в каждом месте.

vector<string> words;
stringstream ss("some random words that I wrote just now");
string word;
while(getline(ss, word, ' ')){
    words.push_back(word);
}

Мне интересно, почему здесь мы используем stringstream, а не просто string.
Это будет работать следующим образом:

  1. Создание строкового объекта в ячейке памяти x
  2. При ссылке go через каждый символ и проверка, является ли это пробелом. Все предыдущие символы должны быть где-то временно сохранены.
  3. Если это пробел, возьмите все, что мы только что сохранили, и приклейте его в конец вектора, затем очистите временное хранилище. Если это не пробел, go вернуться к шагу 2

Что сохраняет "some random words that I wrote just now" как stringstream, чтобы помочь нам здесь? Это просто создание потока символов, чтобы мы могли их просмотреть? Это необходимо? Всегда ли мы делаем это, даже на других языках?

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Мне интересно, почему мы используем здесь строковый поток, а не просто строку.

Если это вопрос, то одна большая причина, почему используется stringstream это просто - потому что программист работает без особых усилий. Чем меньше кода вы напишете, тем меньше вероятность возникновения ошибок.

Ваш метод использования всего std::string и поиска пробелов требует, чтобы программист на C ++ написал все эти шаги (создать строку, вручную найти пробелы, et c). Это может быть тривиально для написания, но даже лучшие программисты могут ошибаться в тривиальном коде. Код может содержать ошибки, может не охватывать все крайние случаи и т. Д. c.

Что касается простоты использования:

Когда программист на C ++ видит stringstream в отношении использования разделить жало пробелом, цель кода сразу становится известна.

Если, с другой стороны, программист решает вручную проанализировать данные, используя только string и ища пробелы, код будет не сразу понял, что он делает, когда другой программист читает код. Конечно, это может быть быстрая реализация кода другим программистом, но я могу поспорить, что другой программист скажет: «Почему вы не использовали stringstream?».

0 голосов
/ 12 июля 2020

Что сохраняет "some random words that I wrote just now" как stringstream, чтобы помочь нам здесь? Это просто создание потока символов, чтобы мы могли их просмотреть? Это необходимо?

std::stringstream просто позволяет вам использовать обычные операции ввода / вывода, такие как >> и std::getline в строке. Вы не можете использовать std::getline для чтения из std::string, поэтому сначала вы помещаете строку в std::streamstream. Вы можете полностью разобрать строку, перебирая символы самостоятельно, как вы описали.

Всегда ли мы делаем это, даже на других языках?

Не в Python по крайней мере. Там вы бы просто набрали words = line.split(' ').

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