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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
24.05.2012, 22:34     Разделение строки на отдельные слова [С++] #1
Надо разделить строку на отдельные слова. Использовать strtok() нельзя.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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/8df1ad...d4ec0b587a2f73
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
24.05.2012, 22:50  [ТС]     Разделение строки на отдельные слова [С++] #3
эм... а через указатели как-нибудь?
и без "istringstream"
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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/b60837...62705a1076a75e
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
25.05.2012, 00:59  [ТС]     Разделение строки на отдельные слова [С++] #5
хм) спасибо) нуу.. а как-нибудь через самые простые ф-ции string.h?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.05.2012, 01:08     Разделение строки на отдельные слова [С++] #6
Цитата Сообщение от dimon0909 Посмотреть сообщение
нуу.. а как-нибудь через самые простые ф-ции string.h?
Цитата Сообщение от gray_fox Посмотреть сообщение
std::strncpy
это и есть простая функция из cstring (string.h если вам будет угодно)
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:: "
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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/19cc95...388fc4179d1351
dimon0909
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 7
25.05.2012, 02:15  [ТС]     Разделение строки на отдельные слова [С++] #9
Отлично) Огромное спасибо!
только один вопрос.. isspace() проверят является ли элемент разделителем.. так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2012, 02:18     Разделение строки на отдельные слова [С++]
Еще ссылки по теме:

С++, MFC, разделение строки типа CString на слова C++
Функция разбиения строки на отдельные слова C++
C++ Символьные строки. Разделение на слова

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.05.2012, 02:18     Разделение строки на отдельные слова [С++] #10
Цитата Сообщение от dimon0909 Посмотреть сообщение
isspace() проверят является ли элемент разделителем.. так
Ну да: табы там всякие, пробелы, в описании посмотрите, там все эти символы должны быть указаны.
Yandex
Объявления
25.05.2012, 02:18     Разделение строки на отдельные слова [С++]
Ответ Создать тему
Опции темы

Текущее время: 01:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru