Вот код, мы надеемся, приведет вас в хороших направлениях:
#include <iostream>
#include <string> // std::string
#include <set> // std::set
#include <sstream> // std::istringstream
namespace my {
using std::cin;
using std::cout;
using std::istringstream;
using std::set;
using std::string;
auto set_of_words(const string& s)
-> set<string>
{
set<string> result;
istringstream iss(s);
string word;
while(iss >> word)
{
result.insert(word);
}
return result;
}
auto getline(const string& prompt)
-> string
{
string result;
cout << prompt;
getline(cin, result);
return result;
}
} // namespace my
auto main() -> int
{
using namespace my;
using namespace std;
const set<string> words = set_of_words(getline("A line of words, please: "));
cout << "You entered these unique_words:" << endl;
for(const string word : words)
{
cout << "* " << word << endl;
}
}
Основная проблема с этим кодом является то, что он не проверяет или обработки сбоев. В профессиональной работе большая часть кода часто связана с проверкой и обработкой ошибок. В частности, функция my::getline
должна не просто молча возвращать результат при сбое ввода.
Другой проблемой является отсутствие повторного использования из-за отсутствия абстракции. Как я уже упоминал в комментарии к вопросу, естественным способом для опытного программиста является передача функции split-to-words через слова в выходной итератор. Затем это облегчает как прямое использование для различных целей, таких как вывод слов по одной линии или добавление их в набор, либо размещение их в конце вектора & hellip ;; и это облегчает кодирование удобных оберток для таких целей. Что еще более важно, это общий принцип, который просто не нуждается в ограничении для представления данных. Но, с другой стороны, не растрачивая работу на надежное обобщение, потому что в конце концов можно обнаружить, что оно не используется.
Передайте каждое слово выходному итератору. Может быть, определить удобную оболочку, которая использует это, чтобы вернуть вектор слов. –
Извините, но я действительно новичок в C++. Есть ли более простой способ или вы можете объяснить свой путь? –
Поскольку вам нужно вернуть набор, вы должны объявить его. Затем вставьте в него значения в свой цикл и верните его, когда цикл закончится. –