4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
|
||||||
1 | ||||||
Функция strtok, нужны комментарии к коду28.03.2011, 14:30. Показов 52710. Ответов 10
Метки нет (Все метки)
расскажите алгоритм
0
|
28.03.2011, 14:30 | |
Ответы с готовыми решениями:
10
Нужны комментарии к коду Нужны комментарии к коду Нужны комментарии к коду Нужны комментарии к коду |
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
28.03.2011, 14:54 | 2 |
Сообщение было отмечено как решение
Решение
Функция strtok вычленяет токены, разделяемые любым из символов " ,.-", из исходной строки (при этом разрушая ее). Каждый вызов strtok возвращает указатель на строку-токен, заканчивающуюся символом '\0'. Если просмотрена вся исходная строка, то функция возвращает NULL.
Следовательно, алгоритм - пока pch не равно NULL, разбиваем строку на подстроки, разделенные символами " ,.-", и печатаем эти подстроки. strtok
Код
STRTOK(3) Linux Programmer's Manual STRTOK(3) NAME strtok, strtok_r - extract tokens from strings SYNOPSIS #include <string.h> char *strtok(char *str, const char *delim); char *strtok_r(char *str, const char *delim, char **saveptr); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): strtok_r(): _SVID_SOURCE || _BSD_SOURCE || _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE DESCRIPTION The strtok() function parses a string into a sequence of tokens. On the first call to strtok() the string to be parsed should be specified in str. In each subsequent call that should parse the same string, str should be NULL. The delim argument specifies a set of characters that delimit the tokens in the parsed string. The caller may specify different strings in delim in successive calls that parse the same string. Each call to strtok() returns a pointer to a null-terminated string containing the next token. This string does not include the delimiting character. If no more tokens are found, strtok() returns NULL. A sequence of two or more contiguous delimiter characters in the parsed string is considered to be a single delim‐ iter. Delimiter characters at the start or end of the string are ignored. Put another way: the tokens returned by strtok() are always nonempty strings. The strtok_r() function is a reentrant version strtok(). The saveptr argument is a pointer to a char * variable that is used internally by strtok_r() in order to maintain context between successive calls that parse the same string. On the first call to strtok_r(), str should point to the string to be parsed, and the value of saveptr is ignored. In subsequent calls, str should be NULL, and saveptr should be unchanged since the previous call. Different strings may be parsed concurrently using sequences of calls to strtok_r() that specify different saveptr arguments. RETURN VALUE The strtok() and strtok_r() functions return a pointer to the next token, or NULL if there are no more tokens.
6
|
4 / 4 / 1
Регистрация: 22.11.2010
Сообщений: 101
|
||||||
28.03.2011, 15:05 [ТС] | 3 | |||||
а как именно ,можно подробно?и что такое такены? pch = strtok (str," ,.-"); -это я понял а что дальше??
1
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
28.03.2011, 15:20 | 4 | |||||
Сообщение было отмечено как решение
Решение
Zheka91, токен в данном случае - это последовательность символов исходной строки, которая ограничена символами-разделителями.
Пусть, к примеру, у нас задана строка "this is a string,divided.into-tokens". В качестве символов-разделителей у нас задана строка " ,.-", т.е. любой и этих символов будет отделять один токен от другого. Очевидно, что токенами будут: "this", "is", "a", "string", "divided", "into", "tokens". Когда выполниться строка программы
Все таки я посоветую прочитать кусок man'a, который я привел в предыдущем сообщении, тогда многие вопросы отпадут сами собой.
10
|
154 / 146 / 20
Регистрация: 12.03.2011
Сообщений: 806
|
|
26.01.2012, 16:22 | 5 |
Почему тут в качестве параметра строки идет NULL? Ведь мы же работаем с исходной строкой.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
26.01.2012, 16:23 | 6 |
bober94, исходная строка задается при первом вызове strtok. Во всех последующих вызовах задается нулевой указатель (в сообщении Функция strtok, нужны комментарии к коду под катом приведено описание функции)
2
|
4 / 4 / 1
Регистрация: 07.01.2013
Сообщений: 103
|
|
23.06.2013, 15:18 | 7 |
@Nameless One, а, допустим, что я хочу вывести этот так скажем "массив из слов", то что нам нужно сделать?
0
|
23.06.2013, 15:25 | 8 |
не каждого, а только первого из каждой серии подряд идущих разделителей. например, если строка была такой
abc...123,,,\0 то после strtiok она станет такой abc\0..123\0,,\0
1
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
23.06.2013, 15:57 | 9 | |||||
Я так понимаю, главный вопрос в том, как сформировать этот массив? Потому что вывод массива тривиален: в цикле для каждого элемента массива выводишь этот элемент.
Для формировании массива есть два подхода. Первый подразумевает, что максимально возможное число элементов массива заранее известно, и количество элементов массива при любых входных данных не может превышать это число. Тогда нужно просто объявить статический массив достаточного размера. При втором подходе объявляется динамический массив, размер которого увеличивается при необходимости. Вот пример со вторым подходом: программа получает входную строку (и, возможно, строку разделителей), разбивает эту строку на слова (токены) по разделителям, помещая эти разделители в массив, и выводит этот массив:
2
|
20.03.2020, 23:32 | 10 |
Nameless One, VS2010 ругается на строку 48:
" error C2440: =: невозможно преобразовать "void *" в "char **" 1> Для преобразования "void*" к указателю на тип, не являющемуся "void", требуется явное приведение" Это возможно как-то поправить?
0
|
Вездепух
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
|
|
21.03.2020, 00:14 | 11 |
Именно это и означает аргумент null: "работаем с исходной строкой".
Если вы передадите не null, то это означает: "начинаем работать с новой строкой" Добавлено через 1 минуту Вам же написали прямо в сообщении об ошибке: требуется явное приведение. Вот и приведите. Явно.
0
|
21.03.2020, 00:14 | |
21.03.2020, 00:14 | |
Помогаю со студенческими работами здесь
11
Нужны комментарии к коду Нужны комментарии к коду Нужны комментарии к коду Нужны комментарии к коду Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Блоги программистов | |||||
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества
Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
|
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов.
. . .
|
С чего начать программировать микроконтроллеры
raxper 06.01.2025
Введение в мир микроконтроллеров
Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
|
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
|
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|
Это мы не проходили, это нам не задавали...(асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
|
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
|