strtok



Strtok s

Автор Bhws mkt задал вопрос в разделе Другие языки и технологии

Вопрос по функции Си strtok. Никак не могу разобраться как она работает... и получил лучший ответ

Ответ от Личный Кабинет Удален[гуру]
Добрый вечер!
Постарался рассказать об этой функции максимально кратко и понятно (а главное - по-русски) :
1. Функция strtok() позволяет разбить строку на части с использованием заданных разделителей.
На практике эту функцию удобно использовать, например, для ввода даты, когда надо выделить день, месяц и год, разделённые точкой.
2. Как и большинство других функций для работы со строками, хранится в заголовочном файле <string.h>.
То есть в начало кода нужно добавить
#include <string.h>
3. Сам синтаксис strtok():
char *strtok(char *str, const char *sep);
Первый аргумент - указатель на строку, которую нужно разбить на части.
Второй аргумент - указатель на строку, содержащую набор символов-разделителей.
Возвращает указатель на полученную в итоге лексему.
4. Функция strtok() выделяет очередную часть строки str, отделенную одним из символов разделителей sep. Последовательный вызов функции strtok() приводит к разбиению строки str на части (лексемы) .
5. И, наконец, пример:
#include <stdio.h> // printf()
#include <string.h> // strtok()
int main (void)
{
char str [24]="27.06.2013";
char sep [10]=".";
char *istr;
printf ("Ishodnaya stroka: %s
", str);
printf ("Result:
");
istr = strtok (str,sep);
while (istr != NULL)
{
printf ("%s
",istr);
istr = strtok (NULL,sep);
}
return 0;
}
6. Ну и если возникли дополнительные вопросы, вот ссылка (заметьте, по-русски) :
Удачи и до свидания!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>ra
> ...
Конечно, C и C++ очень сходны. Но всё же путать не стоит. Или Вы хотели Сан Саныча заменить, пока тот в отпуске? :-))
> Снизу пример, который должен быть понятен любому, знакомому с Си.
Пример на C++ не всегда понятен любому, знакомому с C. Как и пример на Delphi не всегда понятен любому, знакомому с Turbo Pascal.
А вот наоборот - да.

Ответ от И.А. Голованов[гуру]
думаю, судя по описанию внутри там примерно такое
(код примерный - состряпал на коленке. могут быть неполадки с индексами)
char *strstr(char *str, char*razd){
static char * nach;// для хранения указателя на хвост между вызовами
char *ret=NULL;
int i=0;
if(str)nach=str;//взять новую строку или использовать запомпенное
if(!nach)return NULL;
while( nach[ i] && strchr(razd,nach[ i]) )i++; //отрезать разделители вначале
if(!nach[ i]){nach=NULL; return ret;} // одни разделители
nach[ i-1]=0;nach+=i;ret=nach;i=0; //зафиксировать начало токена
while( nach[ i] && !strchr(razd,nach[ i]) )i++; //идти до разделителя
while( nach[ i] && strchr(razd,nach[ i]) ){nach[ i] =0;i++;} //заглушить разделители дальше до нового токена или конца строки
if(nach[ i])nach+=i; else nach=NULL; //запомнить начало остатка
return ret;
}
надеюсь поможет разобраться

Ответ от Ra[гуру]
ссылка
Снизу пример, который должен быть понятен любому, знакомому с Си.
Если первый параметр указатель, то strtok "начинает по новой". Если NULL, то продолжает со строкой, указанной в первом вызове. Второй параметр -- разделители. Каждый вызов возвращает указатель на очередную лексему (подстроку, которую ограничена разделителями) , или NULL, если строка полностью обработана.
strtok() "разрушает" обрабатываемую строку, если исходную строку нужно сохранить, то придется работать с копией строки.
Что конкретно непонятно?

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Вопрос по функции Си strtok. Никак не могу разобраться как она работает...
спросили в Panhard Vocaloid
Вы считаете девушку в обтягивающих брюках в общественном месте вульгарной?
Обтягивающие брюки, юбки, все это нормально, для тех, кто знает меру и вкус. Если обтягивающие
подробнее...
спросили в Achievements
reach and achieve what\'s the difference ?
reach- как расстояние, а achieve -как успехи,
подробнее...

Чит Коды GTA SA У меня GTA SA DAG style как вводить чит коды а то не выходит P.S скачала через торрент
aezakmi
rocketman
Блин а дальше не помню, наизусть еще пять лет назад выучил. Чтобы
подробнее...
спросили в Disciples
лучшие пошаговые стратегии (можно с элементами РПГ)
Герои Меча и Магии 3, Космическая Федерация 2: Звёзды Страха, Космические Рейнджеры 2: Доминаторы:
подробнее...

привет! у меня проблема по gta san andreas
Скачай трейнер +151 CrazyVirus, в нем есть функция "Закрасить все граффити"
Источник:
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в ALT Linux Packet radio
как стать суперпользователем c правами root в linux Ubuntu
Этот вопрос - начало конца линукс :))
Скучаете по работе с админскими правами под виндой?подробнее...
спросили в Найроби
За что птица-мышь получила своё название?
Своё название птицы-мыши получили за цвет оперенья и за обыкновение молниеносно передвигаться в
подробнее...
спросили в Freeware games Lagardère
Где можно скачать игру "Брат 2:Обратно в Америку"??
там могут быть
http://avaload.ru/category/games/
http://afil.ru/main/games/подробнее...
спросили в Discovery Стратегии
Какие вы знаете стратегии на пк?


Военные
Act of War: Direct Action RTS |
C&C: Iraq War
Cold Zero: The Last
подробнее...
спросили в Стратегии Civilization
Стратегия на PS3. Подскажите, пожалуйста, хорошую стратегию.
Стратегиями консоли не богаты..., лучше конечно в uncharted 2 и 3
тем не менее советую
Sid
подробнее...
спросили в Command Conquer Lertha
А для PSP есть хорошие стратегии?
Sid Meier\'s Pirates! (8.5/10);
Field Commander (8/10);
Metal Gear AC!D (7/10);
Metal
подробнее...
Strtok на Википедии
Посмотрите статью на википедии про Strtok
Абрамов Александр Викторович на Википедии
Посмотрите статью на википедии про Абрамов Александр Викторович
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*