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

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

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

Author24 — интернет-сервис помощи студентам
Функция успешно разделяют строку на лексемы из массива символов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2014, 23:39
Ответы с готовыми решениями:

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

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

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

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

15
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
13.08.2014, 23:48 2
Попробуйте пробел в конце поставить
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
13.08.2014, 23:51  [ТС] 3
Что вы имеете ввиду?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
13.08.2014, 23:52 4
вот так : ",.- "
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
13.08.2014, 23:56  [ТС] 5
some_name, Бесполезно
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 00:20 6
Попробуйте после
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  [ТС] 7
Удивлен что вы так заинтересованы). Работает ли у вас изначальный код?
Считаете у меня что-то с препроцессором?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:02 8
Цитата Сообщение от Egeniy Посмотреть сообщение
Работает ли у вас изначальный код?
В том то и дело, что запустить не могу. Ругается на то что устарела ф-я strtok().
Поэтому я и прошу скрин этого кошка
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:15  [ТС] 9
Не могу понять как найти это окно, быть может есть аналог данной функции
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:19 10
Функция strtok() не воспринимает пробел как разделитель
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:20 11
Project properties->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions
0
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:26  [ТС] 12
Честно говоря не обязательно разбираться с этой проблемой, я всего лишь ищу способ посчитать количество символов в строке, но никак не придумаю как обойти пробел/табуляцию.

Добавлено через 5 минут
UNICODE
WIN32
QT_DLL
QT_CORE_LIB
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:30 13
Лучший ответ Сообщение было отмечено 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  [ТС] 14
UNICODE
WIN32
QT_DLL
QT_CORE_LIB

Добавлено через 3 минуты
Проблема с директивами #include "stdafx.h"
Мол нет такого файла
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
14.08.2014, 01:36 15
Цитата Сообщение от Egeniy Посмотреть сообщение
Проблема с директивами #include "stdafx.h"
Так уберите ее, просто у вас наверно проект по другому создан или еще что-то...
1
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 27
14.08.2014, 01:42  [ТС] 16
Я параллельно работают с MVS и DEV C++, не везде есть такие библиотеки как stdafx.h, а так ваш код вполне рабочий, большое спасибо)
0
14.08.2014, 01:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2014, 01:42
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru