Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27

Функция strtok() не воспринимает пробел как разделитель

13.08.2014, 23:39. Показов 6112. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция успешно разделяют строку на лексемы из массива символов stri, но при вводе строки с клавиатуры, "пробел" между словами не воспринимает как разделить в отличие от ",.-".
Как сделать чтобы при вводе с клавиатуры функция делила строку на лексемы?
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
//пример использования функции strtok
#include <iostream>
#include <cstring>
 
int main ()
{
int gl=0, sg=0,i,j;
    char gls[]="аеиоуюэя";
    char sog[]="бвгджзйклмнпрстфхцчш";
    char str[100];
    
    std::cout<<"Введите предложение:";
    std::cin>>str;
  char stri[] = "Особенности национальной рыбалки - художественный, комедийный фильм.";
 
  std::cout << "Разделение строки "" << str << "" на лексемы:n";
  char * pch = strtok (stri," ,.-"); // во втором параметре указаны разделитель (пробел, запятая, точка, тире)
 
  while (pch != NULL)                         // пока есть лексемы
  {
      std::cout << pch  << "n";
      pch = strtok (NULL, " ,.-");
  }
  return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2014, 23:39
Ответы с готовыми решениями:

Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok
Задача Дана строка слов с разделителями, в данном примере слова с пробелами Нужно, используя функцию strtok, сформировать из этих слов...

Как работает функция strtok
Как работает функция strtok. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;conio.h&gt; using namespace...

Ввести строку из нескольких слов. Разделитель слов пробел. Удалить лишние пробелы, оставив только один пробел между словами
Ввести строку из нескольких слов. Разделитель слов пробел. Удалить лишние пробелы, оставив только один пробел между словами.

15
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
13.08.2014, 23:48
Попробуйте пробел в конце поставить
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
13.08.2014, 23:51  [ТС]
Что вы имеете ввиду?
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
13.08.2014, 23:52
вот так : ",.- "
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
13.08.2014, 23:56  [ТС]
some_name, Бесполезно
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 00:20
Попробуйте после
C++
1
 std::cout << pch  << "n";
поставить
C++
1
pch   = strtok('\0', " ,.-");
Почему NULL? :
C++
1
pch = strtok (NULL, " ,.-");
Добавлено через 57 секунд
И еще скиньте плз скрин вот такого окна:
Project properties->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions

Добавлено через 1 минуту
А вот эту ch = strtok (NULL, " ,.-"); строку закомментируйте
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 00:55  [ТС]
Удивлен что вы так заинтересованы). Работает ли у вас изначальный код?
Считаете у меня что-то с препроцессором?
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:02
Цитата Сообщение от Egeniy Посмотреть сообщение
Работает ли у вас изначальный код?
В том то и дело, что запустить не могу. Ругается на то что устарела ф-я strtok().
Поэтому я и прошу скрин этого кошка
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:15  [ТС]
Не могу понять как найти это окно, быть может есть аналог данной функции
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:19
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:20
Project properties->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:26  [ТС]
Честно говоря не обязательно разбираться с этой проблемой, я всего лишь ищу способ посчитать количество символов в строке, но никак не придумаю как обойти пробел/табуляцию.

Добавлено через 5 минут
UNICODE
WIN32
QT_DLL
QT_CORE_LIB
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:30
Лучший ответ Сообщение было отмечено Egeniy как решение

Решение

Мож так, с помощью strlen()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
 
int main ()
{
    char data[_MAX_PATH];
 
    std::cout << "Enter any string:"; std::cin.get(data, _MAX_PATH);
    std::cout << "You enter " << strlen(data) 
              << " characters! Veru nice! Cool man!\n";           
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:34  [ТС]
UNICODE
WIN32
QT_DLL
QT_CORE_LIB

Добавлено через 3 минуты
Проблема с директивами #include "stdafx.h"
Мол нет такого файла
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:36
Цитата Сообщение от Egeniy Посмотреть сообщение
Проблема с директивами #include "stdafx.h"
Так уберите ее, просто у вас наверно проект по другому создан или еще что-то...
1
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:42  [ТС]
Я параллельно работают с MVS и DEV C++, не везде есть такие библиотеки как stdafx.h, а так ваш код вполне рабочий, большое спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2014, 01:42
Помогаю со студенческими работами здесь

Как работает функция strtok?
Закоментите пожалуйста char *mystrtok(char * buf, const char * delim) { static char * H, * T, * R; if (buf) ...

Разделитель пробел если сумма в тысячах
Здравствуйте, у меня на сайте есть элемент с id - tt_total там считается общая сумма, и выводится она например как 10000, а нужно чтобы был...

Функция Split не дает указать в бэкслэш как разделитель
string split = words.Split(new Char { ',', '.', ':', '/', '\ ' }); не дает указать в сплите бэкслэш как разделитель:...

Как сменить системные параметры: десятичный разделитель и разделитель в дате?
Как сменить системные параметры: 'десятичный разделитель' и 'разделитель в дате'? Подозреваю, что с помощью API-функций. Хотелось...

Вывод данных из нескольких строк таблицы в одну строку через разделитель (пробел, запятую)
Добрый день! Есть табличка с адресами: addr ul1 ul2 dom вул. 1 Травня вул. 1 Травня 1 вул. 1...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru