J
Jane
Условие: Дано 10 символьных строк, состоящих из слов, разделенных пробелами.
Вывести список неповторяющихся слов.
На Visual C++ задача не идет. Кто-нибудь может переделать?
Вывести список неповторяющихся слов.
На Visual C++ задача не идет. Кто-нибудь может переделать?
Код:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <boost/tokenizer.hpp>
typedef std::vector<std::string> V;
typedef boost::tokenizer<boost::char_separator<char> > char_tokenizer;
typedef std::map<std::string, bool> unique_map;
V get_strings()
{
V v;
// каким-нубудь образом заполним массив строками
v.push_back("1 2 3");
v.push_back("2");
return (v);
}
void test_2()
{
/*
Дано 10 символьных строк, состоящих из слов, разделенных пробелами.
Вывести список неповторяющихся слов.
*/
V v = get_strings();
unique_map strings; // ассоциативный массив для выявления неповторяющихся слов
boost::char_separator<char> separator(" ");
// парсинг ...
for(V::const_iterator stringIt = v.begin(); stringIt != v.end(); ++stringIt)
{
char_tokenizer tokens(*stringIt, separator);
for(char_tokenizer::const_iterator it = tokens.begin(); it != tokens.end(); ++it)
{
unique_map::iterator mapIt = strings.find(*it);
if (mapIt == strings.end())
{
// строка пока встретилась только 1 раз
strings.insert(unique_map::value_type(*it, true));
}
else
{
// повтор строки - сбрасываем флаг уникальности
mapIt->second = false;
}
}
}
// вывод результата
for(unique_map::const_iterator it = strings.begin(); it != strings.end(); ++it)
{
if (it->second)
{
std::cout << it->first << std::endl;
}
}
}