Если не решить то хотя бы подскажите в какую сторону мыслить.
Задание:
Даны две символьные строки. Первая строка содержит пары "слово - синоним". Во второй строке заменить все слова на их синонимы, если такие найдены.
C/C++
Задание по си
Надо бы определить синтаксис этих пар почётче.
Примеры:
Если у второй строки чёткий синтаксис (например, только слова и по одному пробелу или др. разделителю между ними), то её тоже делим сплитом (strtok), каждый элемент получившегося списка обрабатываем раздельно, и потом склеиваем список обратно в строку.
Но если там между словами пунктуация, форматирование и всякая хрень, тогда придётся бежать по строке, т.е. нарисовать какое-то подобие лексического сканнера. Алгоритм такой: находим начало и конец слова (начало - это буква после последовательности небукв, конец - это небуква после последовательности букв; также учесть, что строка может начинаться с буквы или с небуквы). Лукапим слово в созданном ранее словаре (map), и если нашлось, то достаём значение, вырезаем слово из обрабатываемой строки и вместо него вставляем синоним. Длина строки при этом может измениться.
Поскольку это Си, то закат Солнца выполняется вручную - все сплиты придётся самому писать.
Чтобы избежать стандартного сишного геморроя по двиганию байтов в строке туда-сюда, можно результат собирать в массив, где попеременно пойдут заменённые слова и всё, что между ними. А в конце собрать этот массив в итоговую строчку.
Примеры:
большой - охрененный; неудачник - шлемазл; тупой - глупый
большой охрененный\nнеудачник шлемазл\nтупой глупый
А дальше делим строку сплитом по разделителю пар, пару делим по разделителю слов, складываем результат в map (первое слово из пары - ключ, второе - значение).Если у второй строки чёткий синтаксис (например, только слова и по одному пробелу или др. разделителю между ними), то её тоже делим сплитом (strtok), каждый элемент получившегося списка обрабатываем раздельно, и потом склеиваем список обратно в строку.
Но если там между словами пунктуация, форматирование и всякая хрень, тогда придётся бежать по строке, т.е. нарисовать какое-то подобие лексического сканнера. Алгоритм такой: находим начало и конец слова (начало - это буква после последовательности небукв, конец - это небуква после последовательности букв; также учесть, что строка может начинаться с буквы или с небуквы). Лукапим слово в созданном ранее словаре (map), и если нашлось, то достаём значение, вырезаем слово из обрабатываемой строки и вместо него вставляем синоним. Длина строки при этом может измениться.
Поскольку это Си, то закат Солнца выполняется вручную - все сплиты придётся самому писать.
Чтобы избежать стандартного сишного геморроя по двиганию байтов в строке туда-сюда, можно результат собирать в массив, где попеременно пойдут заменённые слова и всё, что между ними. А в конце собрать этот массив в итоговую строчку.
Вячеслав Алещенков
ну вот через тире, написал как в задании. И я думаю этим можно воспользоваться, так как пары в условии стоят в кавычках, и это можноо использовать, что типо все пары в кавычках, через тире
Вячеслав Алещенков
а какие функции ты в своей идее испольуешь, а то поидее нам надо все это делать циклами, и миллионом переменными, поэтому я их ососбо не знаю
Вячеслав Алещенков
С
Похожие вопросы
- Задание в языке Си
- Как написать код по этому заданию? Программирование на Си
- Написать программу в языке Си, которая с помощью указателей на функцию выполняет задание
- Задание по программированию язык C/СИ
- Актуальность Си и Си++
- Изучение Си/Си++ дорожная карта?
- Нужна помощь с выполнением заданий в C++
- Возможно ли создание ЯП производительнее Си?
- Си!!! БЕЗ УКАЗАТЕЛЕЙ, ЯЗЫК СИ
- Решить задачу на языке СИ