Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/46: Рейтинг темы: голосов - 46, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 12

C++ 2010 strtok - не работает

28.04.2010, 15:28. Показов 8578. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
учусь в колледже, недавно(дня 2 назад) начали учить С++. У них там большинство примеров списаны еще с с++ билдера(дос). по этому переносить знания полученные в колледже в жизнь(на visual c++ 2010) тяжеловато. Проблема с strtok причем сразу 2.
1 - он не понимает русский текст. (в начале программы я всегда вписываю
C++
1
1.setlocale(LC_ALL, "Russian");
после этого русский текст можно вводить и выводить, досели не сталкивался с подобной проблемой.(например ввел слово арбуз, а мне в ответ T<spp<< и др мусор)
2 -
C++
1
slovo=strtok(NULL,razd);
- данный код в цикле вызывает ошибку(уже при выполнении программы)
Unhandled exception at 0x0f5dd540 (msvcr100d.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000000.
и открывается библиотека strlen.asm(вроде как там exception) указывая на строку:
main_loop:
mov eax,dword ptr [ecx] ; read 4 bytes
-- забыл дополнить, что первое слово в тексте вырезается без проблем(и именно при выводе его русский текст не отображается как положено - аброкадаброй).
C++
1
slovo = strtok(text,razd);
вот сам код приложения:
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
setlocale(LC_ALL, "Russian");
    char  text[80];        
    char *slovo,  *razd=" .,";    
    int  ks=0, dl;    
    int  ka=0,   i; 
cout<<"\nВведите строку текста ";
    cin>>(text);    
 
    slovo = strtok(text,razd); 
    while (slovo){
        ks++;                               
        dl = strlen(slovo);
        cout <<"\n" << slovo <<" длина "<< dl;
        for ( i=0; i < dl;  i++)
        {
            char t;
            t=Mid(slovo,i,1);
            if (t=='a' ){
                ka++;     }
 
        }
        slovo=strtok(NULL,razd);
        cout <<"\n\tКоличество слов в тексте "<< ks << "\n\tКоличество букв а в тексте " << ka;
    }
---
и доп вопрос:
в коде использую Mid функцию которую обнаружил в инете, рылся в msdn но так и не нашел каких либо встроенных функций типа mid instr и подобных. Может плохо рылся, по возможности маленький пример кода если есть встроенные функции для работы со строками в vcpp.(до этого я на vb кодил, поэтому мне не привычно в C++ ориентироваться.)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2010, 15:28
Ответы с готовыми решениями:

Не работает отладчик в VS-2010
При создании пустого консольного проекта выдаёт ошибки : 'rtr.exe': Loaded 'C:\Users\Admin\Documents\Visual Studio...

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

strtok не работает
Почему не работает код? #include &lt;string.h&gt; #include &lt;iostream.h&gt; #pragma argsused int main(int argc, char* argv) { ...

23
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 12
28.04.2010, 18:21  [ТС]
Студворк — интернет-сервис помощи студентам
кхм, ну я не на столько хорошо срр знаю, но
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream.h>
#include<string.h>
#include<stdio.h>
 
void main()
{
char  text[80],*p, *razd=" .,";;
cout << "\nvvedi text ";
gets(text);
cout << "\n text "<< text;
 
p=strtok(text,razd);         // Выделение первого слова текста
while (p)                    // Пока можно выделить слово
{
cout << "\n" << p;
int dlina, i;
dlina=strlen(p);             // Определение длины слова
cout << "\n слово "<< p << " Длина " << dlina;
p=strtok(NULL,razd);         // Выделение второго, третьего, и т.д. слов
}
это пример в колледже и какбы читается: p=strtok(NULL,razd); // Выделение второго, третьего, и т.д. слов.

если это не так, то зачем тогда цикл был нужен? ) либо я сейчас туплю сильно, либо ошиблись вы.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.04.2010, 18:47
Цитата Сообщение от Rivo Посмотреть сообщение
это пример в колледже и какбы читается: p=strtok(NULL,razd); // Выделение второго, третьего, и т.д. слов.
если это не так, то зачем тогда цикл был нужен? ) либо я сейчас туплю сильно, либо ошиблись вы.
да нет, тут - все правильно.
просто cin не может ввести строку с пробелами.
а gets - может.
0
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 12
28.04.2010, 18:57  [ТС]
хмм. не знал я пробовал gets.. но оно не работает в vc++2010 видимо... тоже ошибка.
пробовал gets_s(text,80);
или даже StringCchGetsA(text,80);

всеравно ошибка причем таже что и в самом первом посте я писал... в strlen.asm
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.04.2010, 20:05
Patch, действительно, в посте 9 я тупанул, когда назвал причину. Однако совет из поста 7 всё равно остаётся неправильным. Или как минимум непонятным "зачем"

Rivo, в любой документации по strtok'у есть некий вариант "классической" записи разбивки строки на слова. Посмотри, например, тут. Правда там используется strtok_r, но суть от этого не меняется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2010, 20:05

Не работает strtok()
Здравствуйте, нужно посчитать количество слов в файле. Подскажите пожалуйста, что не так. Выводит только первую строку и все, количество...

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

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

Не работает strtok в Visual Studio 2012
Проблема в том, что в 2012-ом strtok не работает и выдается ошибка типо нужно strtok_s. Ввожу strtok_s, а это уже абсолютно другая функция,...

2012 strtok не работает и выдается ошибка, что требуется strtok_s
Проблема в том, что в 2012-ом strtok не работает и выдается ошибка типо нужно strtok_s. Ввожу strtok_s, а это уже абсолютно другая функция,...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru