Смена строк в C ++ - PullRequest
       7

Смена строк в C ++

1 голос
/ 06 января 2012

В настоящее время я делаю c ++ и прорабатываю, как принять предложение через строку и поменять местами слова (это слово ...... слово a это и т. Д.)

Я посмотрел на этот метод:

static string reverseWords(string const& instr)
{
    istringstream iss(instr);
    string outstr;
    string word;
    iss >> outstr;
    while (iss >> word)
    {
        outstr = word + ' ' + outstr;
    }
    return outstr;
}

int main()
{
    string s;
    cout << "Enter sentence: ";
    getline(cin, s);

    string sret = reverseWords(s);
    cout << reverseWords(s) << endl;

    return 0;
}

Я прошел через функцию и отчасти понял, но я немного запутался в том, что именно происходит в

iss >> outstr;

while (iss >> word)
    {
        outstr = word + ' ' + outstr;
    }
    return outstr;

Может ли кто-нибудь объяснить мне, какой именно процесс происходит, что позволяет перевернуть слова?

Большое спасибо

Ответы [ 3 ]

3 голосов
/ 06 января 2012

iss является потоком istringstream, а потоки istringstream являются потоками istring.

Как istream, iss имеет operator>>, который считывает строки из своего строкового буфера разделенным пробелом способом. То есть, он читает по одному токену, разделенному пробелами, за раз.

Итак, учитывая строку «Это слово», первое, что он прочитал бы - «Это». Следующее, что он будет читать, будет «есть», затем «а», затем «слово». Тогда это потерпит неудачу. Если он терпит неудачу, это переводит iss в состояние, такое, что, если вы проверяете его как bool, он оценивается как false.

Так что цикл while будет читать по одному слову за раз. Если чтение выполнено успешно, то тело цикла добавляет слово в начало outstr. Если это не удается, цикл заканчивается.

1 голос
/ 06 января 2012

Инструкция:

istringstream iss(instr);

позволяет анализировать instr при использовании operator>>, разделяя слова через пробельные символы.Каждый раз, когда используется оператор >>, он iss указывает на следующее слово фразы, сохраненное в instr.

iss >> outstr; // gets the very first word of the phrase

while (iss >> word) // loop to get the rest of the words, one by one
{
    outstr = word + ' ' + outstr; // and store the most recent word before the previous one, therefore reversing the string!
}
return outstr;

Таким образом, первое слово, полученное в фразе, фактически сохраняется впоследняя позиция выходной строки.И тогда все последующие слова, прочитанные из исходной строки, будут помещены перед тем, как прочитано предыдущее слово.

1 голос
/ 06 января 2012

iss - это stream , а >> - это оператор извлечения . Если вы рассматриваете поток как непрерывную строку данных, оператор извлечения удаляет некоторые данные из этого потока.

Цикл while продолжает извлекать слова из потока, пока он не станет пустым (или пока можно сказать, что поток хороший), можно сказать. Внутренняя часть цикла используется для добавления нового извлеченного слова в конец outstr

Посмотрите информацию о потоках c ++ , чтобы узнать больше.

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