Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/17: Рейтинг темы: голосов - 17, средняя оценка - 4.65
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
1

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

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

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

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

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

Разделение строки на слова
Текст в файле содержит числа, которые записаны в восьмеричной системе...

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

Символьные строки. Разделение на слова
Помогите написать прогу. Не могу разобраться, какие команды применить. Так же...

9
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 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!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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

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

С++, MFC, разделение строки типа CString на слова
Есть три списка ListBox и одно поле редактирования EditBox. В EditBox вводится...

Разделение числа на отдельные цифры
int a, cout&lt;&lt;&quot;Введите пятизначное число: &quot;; cin&gt;&gt;a; cout&lt;&lt;&quot;1я...


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

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

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