Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 5 / 0
Регистрация: 22.01.2011
Сообщений: 41

strtok - необходимость разобрать строку

25.04.2012, 13:33. Показов 2643. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла необходимость разобрать строку. Воспользовался функцией strtok. Т.к. она уничтожает строку, которую парсит, то я пытался сохранить ее для работы в дальнейшем, но не получилось. Вот код:
C++
1
2
3
4
5
6
AnsiString str,mem;
 str="0#123#100";
 char *temp;
 mem=str;
 temp=strtok(str.c_str(),"#");
 ShowMessage(mem);
Здесь я записываю в дополнительную переменную mem исходную строку, но после выполнения strtok в переменной mem оказывается "0\0123#100", т.е. значение, которое должно быть только в переменной str. И собственно вопросы: почему это происходит и как этого избежать? Каким образом эта функция затрагивает переменную, которая с ней никак не связана? Прямо мистика какая то)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2012, 13:33
Ответы с готовыми решениями:

Разбить строку на слова (strtok) и сравнить эти слова со словом из Edit-a
Доброго времени суток, господа! Есть строка, её нужно разбить на слова и сравнить эти слова со словом из Edit'a Программа виснет, что...

Прочитать строку из *.hex и разобрать на значения
Подскажите, пожалуйста, надо прочитать файл в hex - формате и заполнить таблицу вот что в файле: ...

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

3
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
25.04.2012, 15:06
1) Всегда используйте методы вроде с_str(позволяющие получить прямой доступ к данным класса) только для чтения.
2) Если вы решили использовать strtok, скопируйте данные в простой динамический массив.
Цитата Сообщение от Aleks2215 Посмотреть сообщение
Каким образом эта функция затрагивает переменную, которая с ней никак не связана?
Возможно класс AnsiString реализован таким образом, что копирование содержимого в нём откладывается до последнего. Изменяя содержимое класса внешними средствами вы вмешиваетесь во внутренние дела класса, следовательно и результат получается некорректным.
P.S. В билдере, насколько я помню, есть свои средства для разбивки строки на токены.
1
5 / 5 / 0
Регистрация: 22.01.2011
Сообщений: 41
25.04.2012, 16:15  [ТС]
2) Если вы решили использовать strtok, скопируйте данные в простой динамический массив.
Что именно надо скопировать? Если можно с примером)
А что это за средства часом не вспомнишь? а то в билдере я в свое время их не смог найти.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.04.2012, 16:31
Цитата Сообщение от Aleks2215 Посмотреть сообщение
А что это за средства часом не вспомнишь? а то в билдере я в свое время их не смог найти.
http://bcbjournal.org/articles... 587d2c27b7

SubString
Pos
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2012, 16:31
Помогаю со студенческими работами здесь

Не могу разобрать часть кода. Функция strtok
#include <iostream> #include <fstream> #include <conio.h> #include <string.h> void main(void) { using namespace std; ifstream...

Почему strtok неправильно делит строку
Он должен делить по словах("делитель" - пробел) а он делит по-символьно. #include <iostream> #include <string.h> #include...

Почему strtok не переходит на новую строку?
FILE* file = fopen("kakhochy.pam", "r"); const char separator= ";"; char buff; char mass; int i = 0; while(!feof(file)) {...

Разбить строку на массив слов используя strtok()
Мне нужно разделить строку на массив слов используя функцию strtok(), но получается скопировать только первое слово. Подскажите пожалуйста,...

Функция strtok, strcmp: разбить строку на слова
Дан набор слов и произвольная текстовая строка. Выбрать из текстовой строки все слова, входящие в данный набор и вывести их на печать,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru