1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|||||||||||
1 | |||||||||||
Передача параметров в функцию14.04.2016, 02:42. Показов 1520. Ответов 16
Здравствуйте. Пишу аналог функции strtok. Начал на с++ и написал код:
p.s. str1 должна сохранять все изменения которые она претерпела в функции. Приведенный выше код полностью рабочий на C++. То что mstrtok не совсем strtok, на это внимание можете не обращать. Заранее спасибо за ответы.
0
|
14.04.2016, 02:42 | |
Ответы с готовыми решениями:
16
Передача параметров в функцию Передача параметров в функцию Передача строк в функцию со сменным количеством параметров Передача параметров в функцию |
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
||||||
14.04.2016, 03:40 | 2 | |||||
А что вот это за загадочное "измененеие"
Пока ваш код содержит перлы, типа вышепроцитированного, "полностью рабочим" он может только казаться.
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 03:44 [ТС] | 3 |
это косяк, недоглядел, можно просто str1++ оставить
Добавлено через 1 минуту тем не менее данный "перл" никак на работе не сказывается.
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
||||||
14.04.2016, 03:55 | 4 | |||||
Сообщение было отмечено Памирыч как решение
Решение
Вам просто повезло.
Это "перл" теоретически вызывает неопределенное поведение, а практически приведет либо к эквиваленту str++ , либо к эквиваленту "не менять str вообще". В последнем случае код будет работать неправильно. А какой вариант будет выбран компилятором - зависит от компилятора, его настроек, контекста, погоды на Марсе и т.п.Что же касается основного вопроса - придется заменить & на * и везде работать с *str1 вместо str1 , внимательно следя за приоритетом операций
1
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:00 [ТС] | 5 |
Не хочу показаться хамом, но мы по моему зря раздуваем тему. Я задал конкретный вопрос, и хотел бы получить на него ответ. То к чему вы цепляетесь, никак не относится к моему вопросу.
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:01 | 6 |
... а при вызове такой
mstrtok надо будет теперь явно передавать указатель на первый аргумент при помощи оператора & .
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:03 [ТС] | 7 |
Ну через двойной указатель понятно, а через один никак вывернуться нельзя? В библиотечной функции реализовано через один.
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:08 | 8 |
Нельзя.
Ну так вы же сами сказали: "То что mstrtok не совсем strtok, на это внимание можете не обращать." Это и есть одно из принципиальных отличий вашей функции от библиотечной: библиотечная функция сохраняет свой статус в некоей статической переменной (это кстати, плохо), а вы хотите сохранять и возвращать его через параметр (это намного лучше). Ничего не попишешь тогда - придется делать параметр "возвращаемым", а это требует дополнительной * .То есть вывернуться-то конечно можно по-разному, но тогда придется отказываться от выбранного вами подхода. А это, боюсь, будет вами квалифицировано, как "никак не относящееся к вашему конкретному вопросу".
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
||||||
14.04.2016, 04:16 [ТС] | 9 | |||||
имелось ввиду, что библиотечная функция позволяет использовать целую строку разделителей, а моя только один
Добавлено через 6 минут вот я тут чуток переписал:
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:17 | 10 |
Ваши отличия от
strtok заключались не только в этом а еще и в том, что вы пытались хранить состояние парсера в передаваемом извне параметре.
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:19 [ТС] | 11 |
Всё давайте забудем про разделители. Нужно реализовать с одним указателем!
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:20 | 12 |
Теперь получилось больше похоже на
strtok (в плане хранения состояния парсера) со всеми вытекающими из этого проблемами.Правда теперь возникает [посторонний] вопрос: зачем вы все это делаете? Ваша первая версия была лучше strtok в том плане, что была потенциально реентерабельной. Это оправдывало ее существование. А теперь вы получили аналог strtok со всеми его проблемами. Зачем он такой нужен?
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:25 [ТС] | 13 |
По моему тут одна проблема, как остановить выполнение когда вся строка разобрана!?
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:35 | 14 |
В смысле? Применить тот же подход, что и в
strtok - когда вся строка разобрана возвращать null pointer.
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:41 [ТС] | 15 |
В том-то и проблема, что когда я разобрал строку у меня str1 и str4 должны быть NULL, но когда я вновь вызываю функцию оказывается, что str4 = NULL, а str = первому слову в строке.
0
|
Вездепух
12802 / 6677 / 1798
Регистрация: 18.10.2014
Сообщений: 16,901
|
|
14.04.2016, 04:47 | 16 |
Ну так теперь про
str1 в этой роли можно забыть - str1 больше не сохраняет состояние между вызовами. Что вы извне передаете в качестве str1 , то и передается. (Это уж вам виднее, что вы там передаете. Мне отсюда не видно.)Так что состояние парсера вам теперь придется контролировать через str4 и только через str4 .
0
|
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 84
|
|
14.04.2016, 04:51 [ТС] | 17 |
А, всё понятно, нужно передать NULL в функцию.
0
|
14.04.2016, 04:51 | |
14.04.2016, 04:51 | |
Помогаю со студенческими работами здесь
17
Передача параметров в функцию Передача параметров в функцию Передача параметров в функцию Передача параметров в функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
|
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
|
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей
Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
|
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
|
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
|
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
|
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
|
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке
В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
|