Ввод слов по слову
Я только начал изучать С++. Я просто играл с ним и сталкивался с проблемой, которая включала ввод строки по слову, каждое слово, разделенное пробелом. Я имею в виду, предположим, что у меня
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.