С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
#1

Разделение строки на отдельные слова [С++] - C++

24.05.2012, 22:34. Просмотров 2982. Ответов 9
Метки нет (Все метки)

Надо разделить строку на отдельные слова. Использовать strtok() нельзя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 22:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделение строки на отдельные слова [С++] (C++):

Разделение строки типа String на отдельные слова с разделяющим символом - C++
Подскажите пожалуйста, как строку с n-ым количеством слов разделённых символом точка запятой разделить и поместить предположим в массив

Функция разбиения строки на отдельные слова - C++
Подскажите, плиз, как написать функцию разбиения строки на отдельные слова. Параметр функции — исходная строка, результат работы —...

Разделение строки на слова - C++
Текст в файле содержит числа, которые записаны в восьмеричной системе счисления. Преобразовать эти числа в десятичную систему счисления и...

разделение строки на слова - C++
нужно разбить строку на слова (си) без использования библиотеки string.h (пользоваться можно только stdio.h) можно использовать...

Разделение строки на слова - C++
Подскажите пожалуйста, как разделить строку на отдельные слова. Заранее спасибо.

Символьные строки. Разделение на слова - C++
Помогите написать прогу. Не могу разобраться, какие команды применить. Так же нужно использовать отдельно функцию. В Файле находится...

9
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
24.05.2012, 22:43 #2
istringstream решит проблему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <sstream>
#include <string>
 
 
int main() {
   std::string str = "This is a sample string";
   
   std::istringstream iss(str);
   std::string word;
   
   while (iss >> word) {
      std::cout << word << std::endl;
   }
}
http://liveworkspace.org/code/8df1adca6a18b09090d4ec0b587a2f73
0
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
24.05.2012, 22:50  [ТС] #3
эм... а через указатели как-нибудь?
и без "istringstream"
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
24.05.2012, 23:21 #4
Цитата Сообщение от dimon0909 Посмотреть сообщение
через указатели как-нибудь
Только указатели, только хардкор? Тогда могу предложить лишь говнокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
 
#define MAX_WORD_LENGTH   128
 
 
int main() {
   char const* str = "This is a sample string";
   char word[MAX_WORD_LENGTH + 1];
       
   for (char const* first = str, * last; ; first = last) {
      for ( ; *first != '\0' && std::isspace(*first); ++first);
      if (*first == '\0') {
         break;
      }
      for (last = first; *++last != '\0' && !std::isspace(*last); );
      std::strncpy(word, first, last - first);
      word[last - first] = '\0';
      
      std::cout << word << std::endl;
   }
}
http://liveworkspace.org/code/b608376e1408d0099f62705a1076a75e
0
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
25.05.2012, 00:59  [ТС] #5
хм) спасибо) нуу.. а как-нибудь через самые простые ф-ции string.h?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.05.2012, 01:08 #6
Цитата Сообщение от dimon0909 Посмотреть сообщение
нуу.. а как-нибудь через самые простые ф-ции string.h?
Цитата Сообщение от gray_fox Посмотреть сообщение
std::strncpy
это и есть простая функция из cstring (string.h если вам будет угодно)
0
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
25.05.2012, 01:24  [ТС] #7
я имел ввиду такого типа ф-ции (http://cppworld.h16.ru/stdc/string_h.htm). Такие как "std::strncpy" ,увы, не проходились..
в смысле именно чтобы "std:: "
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.05.2012, 01:59 #8
Это и есть те самые функции. Просто в С++ библиотеки С "обёрнуты". string.h в cstring, ctype.h в cctype, stdio.h в cstdio и т.д. + размещены в пространстве имён std, т.е. std::strncpy - это strncpy, std::isspace - isspace.

Добавлено через 5 минут
Этот же код на С:
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
 
#define MAX_WORD_LENGTH   128
 
 
int main() {
   char const* str = "This is a sample string";
   char word[MAX_WORD_LENGTH + 1];
   char const* first;
   char const* last;
       
   for (first = str; ; first = last) {
      for ( ; *first != '\0' && isspace(*first); ++first);
      if (*first == '\0') {
         break;
      }
      for (last = first; *++last != '\0' && !isspace(*last); );
      strncpy(word, first, last - first);
      word[last - first] = '\0';
      
      printf("%s\n", word);
   }
   
   return EXIT_SUCCESS;
}
http://liveworkspace.org/code/19cc953a5a559facb2388fc4179d1351
1
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
25.05.2012, 02:15  [ТС] #9
Отлично) Огромное спасибо!
только один вопрос.. isspace() проверят является ли элемент разделителем.. так?
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.05.2012, 02:18 #10
Цитата Сообщение от dimon0909 Посмотреть сообщение
isspace() проверят является ли элемент разделителем.. так
Ну да: табы там всякие, пробелы, в описании посмотрите, там все эти символы должны быть указаны.
0
25.05.2012, 02:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2012, 02:18
Привет! Вот еще темы с ответами:

С++, MFC, разделение строки типа CString на слова - C++
Есть три списка ListBox и одно поле редактирования EditBox. В EditBox вводится информация в формате «Фамилия Имя Отчество». По завершении...

Разделение числа на отдельные цифры - C++
int a, cout&lt;&lt;&quot;Введите пятизначное число: &quot;; cin&gt;&gt;a; cout&lt;&lt;&quot;1я цифра&quot;&lt;&lt;(a/10000)&lt;&lt;&quot;\n&quot;; cout&lt;&lt;&quot;2я цифра&quot;&lt;&lt;(a/1000)%10&lt;&lt;&quot;\n&quot;; ...

Отбирать отдельные слова из файла - C++
Здравствуйте! Мне нужно из файла, примерно такого вида: Car Author Noname mass 1500 //comment kpp 1.0 0.5 0.2 nodes 1, 50.0,...

Отсортировать цифры, символы и буквы из строки в отдельные строки - C++
1. Дана строка содержащая цифры, символы и буквы. Отсортировать их в отдельные строки. 2. 3. 4.Правила


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.