Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Наследование от std::basic_string - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение UNICODE символов из STDOUT процесса http://www.cyberforum.ru/cpp-beginners/thread1206474.html
У меня есть процесс (cmd.exe) создан через WINAPI функцию CreateProcess. К процессу подключено 2 переменных типа HANDLE из которых в свою очередь созданы пайпы для записи и чтения из процесса....
C++ Оптимизация. Метод Марквардта Дорогие форумчане. Выручите. Нужна помощь по методам оптимизации метода Марквардта. Не пойму, что я упустил. Программа выдает не те данные. Должно на выходе х6=(-0.01;0,03). а у меня берет другую... http://www.cyberforum.ru/cpp-beginners/thread1206473.html
Построить упорядоченный по возрастанию третий массив слиянием двух заданных C++
Заданные два упорядоченных по возрастанию одинаковых массива. Построить упорядоченный по возрастанию третий массив слиянием двух заданных.
Системное программирование. Работа с процессами и анонимным каналом C++
Есть задание .Программа порождает два процесса, один процесс пишет в неименованный канал, другой считывает из него информацию и записывает в файл. Есть программа. Текст программы: #include...
C++ Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию http://www.cyberforum.ru/cpp-beginners/thread1206467.html
Значит есть одномерный массив из 10 чисел. Заполнен случайными значениями. Числа расположенные на нечетных позициях необходимо отсортировать по возрастанию. Числа расположенные на четных позициях...
C++ Обращение к элементам массива через биты некоторого числа Пусть есть массив Mass из 10 элементов и число А = 510 = 0...0 01012. Мне надо обратиться к 0 и 2 элементам (или к 7 и 9 - это как посмотреть) массива Mass. Можно ли как-нибудь через биты числа А... подробнее

Показать сообщение отдельно
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2

Наследование от std::basic_string - C++

12.06.2014, 18:28. Просмотров 389. Ответов 4
Метки (Все метки)

Суть задачки: надо с текста считать слова через istream_iterator откидывая знаки пунктуации в конце слов. Написал вот так, отнаследовав от std::basic_string. В принципе, все работает, но правильно ли так делать? Какие еще способы кто может предложить?
Была еще идея писать свой istream_iterator, но там код слишком длинный получается ради такой простой задачки. Может есть что то такое в boost? Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <string>
#include <iterator>
#include <sstream>
#include <vector>
#include <algorithm>
 
template <typename CharT,
          typename Traits = std::char_traits<CharT>,
          typename Allocator = std::allocator<CharT>>
class basic_string_adapter : public std::basic_string<CharT, Traits, Allocator>
{
   using basic_str = std::basic_string<CharT, Traits, Allocator>;
public:
   using basic_str::basic_str;
   using basic_str::operator =;
 
   friend
   std::basic_istream<CharT, Traits>&
   operator>>(std::basic_istream<CharT, Traits>& is,
              basic_string_adapter<CharT, Traits, Allocator>& str)
   {
      //is >> str;
      basic_str temp;
      is >> temp;
      auto pos = std::find_if(temp.begin(), temp.end(), ::ispunct);
      temp.erase(pos, temp.end());
      str = std::move(temp);
      return is;
   }
};
 
int main()
{
   std::istringstream iss{"one, two,, three; four: five"};
   using mystring = basic_string_adapter<char>;
   std::vector<mystring> v{std::istream_iterator<mystring>(iss), std::istream_iterator<mystring>()};
   for (auto s : v) std::cout << s << " ";
 
   system("pause");
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru