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

Как разделить строку на слова? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка push_back() в vector http://www.cyberforum.ru/cpp-beginners/thread997404.html
Доброго времени суток. Сразу код : #include "stdafx.h" #include "expat.h" #include <stdio.h> #include <iostream> #include <string> #include <vector> using std::string;
C++ Дано три строки,нужно вывести первую,удалив из нее гласные,содержащиеся во второй и удвоив согласные,содержащиеся в третьей Дано три строки,нужно вывести первую,удалив из нее гласные,содержащиеся во второй и удвоив согласные,содержащиеся в третьей Например: tetrad rebus real получится ttrrad http://www.cyberforum.ru/cpp-beginners/thread997395.html
C++ Попытка создать обработку событий
Попытался создать что-то наподобии сигналов и слотов. Вот мой файл Event.h #ifndef ELEM_H #define ELEM_H #include <vector> #include "Delegate.h" using std::vector;
Демографическая модель Мальтуса C++
Добра вам, дорогие форумчане. Нужно написать программу, которая по заданным параметрам будет строить демографическую модель Мальтуса Параметры которые можно менять: коэффициент рождаемости, смертности, начальная численность популяции, внешние переменные В фото прикрепил вырезку из практикума
C++ Разработка библиотеки на С++ работа со списками http://www.cyberforum.ru/cpp-beginners/thread997348.html
Требуется разработать библиотеку com для работы с полуторосвязным списком(где каждый элемент имеет указатель на следующий и только каждый 10ый имеет указатель назад) в этой библиотеке должны быть все функции для работы с таким списком. Также он является упорядоченным. Заранее большое спасибо, помогите новичку пожалуйста.
C++ Решение задачи Имеется задача: Имеем К квадратных плиток. Из них нужно выложить прямоугольник высотой H и шириной W плиток. Вариантов, как вы понимаете, немало. Но каждый прямоугольник имеет свой ​​код. Этот код вычисляется как сумма двух величин: Квадратоподобие = | H - W | Экономичность = К - H * W Нужно найти минимально возможный код прямоугольника. подробнее

Показать сообщение отдельно
zombiethegame
 Аватар для zombiethegame
1 / 1 / 0
Регистрация: 08.08.2011
Сообщений: 23
04.11.2013, 21:06  [ТС]     Как разделить строку на слова?
Цитата Сообщение от gray_fox Посмотреть сообщение
а может...
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <cassert>
 
 
struct c_str_ref {
 
   c_str_ref() : first(), last() {}
 
   c_str_ref(char const* const first, char const* const last) : first(first), last(last) {}
   
   char const* begin() const {
      return first;
   }
   
   char const* end() const {
      return last;
   }
   
   bool empty() const {
      return begin() == end();
   }
   
   std::size_t size() const  {
      return end() - begin();
   }
 
 
private:
   char const* first;
   char const* last;
};
 
std::ostream & operator <<(std::ostream & ostream, c_str_ref const ref) {
   ostream.write(ref.begin(), ref.size());
   return ostream;
}
 
 
char const* c_str_find(char const* str, char const what) {
   assert(str); 
 
   for ( ; *str; ++str) {
      if (*str == what) {
         return str;
      }
   }
   
   return 0;
}
 
 
struct splitted {
 
   splitted(char const* const str, char const* const separators)
        : str(str), separators(separators), curr() {
      assert(str);
      assert(separators);
      next();
   }
   
   bool has_next() {
      return !curr.empty();
   }
   
   c_str_ref current() const {
      return curr;
   }
   
   void next() {
      char const* const first = first_nonseparator_or_end();
         
      if (*str) {
         ++str;
      }
      
      curr = {first, first_separator_or_end()};
   }
   
   
private:
   char const* first_separator_or_end() {
      for ( ; *str; ++str) {
         if (c_str_find(separators, *str)) {
            return str;
         }
      }
      
      return str;
   }
   
   char const* first_nonseparator_or_end() {
      for ( ; *str; ++str) {
         if (!c_str_find(separators, *str)) {
            return str;
         }
      }
      
      return str;
   }
 
 
   char const* str;
   char const* const separators;
   c_str_ref curr;
};
 
 
int main() {
   char const* const str = "This is text, and it is black.";
    
   for (splitted word(str, "., "); word.has_next(); word.next()) {
      std::cout << word.current() << std::endl;
   }
}
http://ideone.com/JOEKs5
Да! То что нужно. Немного сложновато для понимания, но работает и пусть работает.
curr = {first, first_separator_or_end()}; - эта строчка не работала, заменил на:
curr = c_str_ref(first, first_separator_or_end());.
Вроде работает.
Огромное спасибо!
 
Текущее время: 05:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru