Ввод слов по слову

Я только начал изучать С++. Я просто играл с ним и сталкивался с проблемой, которая включала ввод строки по слову, каждое слово, разделенное пробелом. Я имею в виду, предположим, что у меня

   name  place animal 

. Я хочу прочитать первое слово, выполнить некоторые операции над ним. Затем прочитайте второе слово, выполните некоторые операции над этим, а затем прочитайте следующее слово и так далее.

Я попытался сохранить всю строку сначала с помощью getline, как это

    #include<iostream>
    using namespace std;
    int main()
    {
     string t;
     getline(cin,t);
     cout << t; //just to confirm the input is read correctly
    }

Но как я могу выполнить операцию над каждым словом и перейти к следующему слову?

Кроме того, в то время как googling вокруг около С++ я видел во многих местах, вместо того, чтобы использовать "using namespace std", люди предпочитают писать "std::" со всем. Почему так? Я думаю, что они делают то же самое. Тогда зачем беспокоиться о том, чтобы писать это снова и снова?

Ответы

Ответ 1

Поместите строку в строку и извлеките слово за словом:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    string t;
    getline(cin,t);

    istringstream iss(t);
    string word;
    while(iss >> word) {
        /* do stuff with word */
    }
}

Конечно, вы можете просто пропустить часть getline и напрямую прочитать слово из cin.

И здесь вы можете прочитать почему using namespace std считается плохой практикой.

Ответ 2

(Это полезно для других, кто может ссылаться)

Вы можете просто использовать cin и массив char. Вход cin ограничивается первым пробелом, с которым он сталкивается.

#include<iostream>
using namespace std;

main()
{
    char word[50];
    cin>>word;
    while(word){
        //Do stuff with word[]
        cin>>word;
    }
}

Ответ 3

getline хранит всю строку сразу, что не то, что вы хотите. Простое решение состоит в том, чтобы иметь три переменные и использовать cin, чтобы получить их все. С++ автоматически проанализирует пробелы.

#include <iostream>
using namespace std;

int main() {
    string a, b, c;
    cin >> a >> b >> c;
    //now you have your three words
    return 0;
}

Я не знаю, какую конкретную "операцию" вы говорите, поэтому я не могу вам помочь, но если она меняет символы, читайте строки и индексы. Документация на С++ отличная. Что касается использования пространства имен std; в сравнении с std:: и другими библиотеками, уже много сказано. Попробуйте эти questions для запуска StackOverflow.