Помогите, пожалуйста, со строками.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Задание: копирование прилагательных в новой строке:
было: _obichnaya_istoria
задание:_obichnaya_obichnaya_istoria.
В условии цикла-окончание -ая (prostaya, peredovaya и т.д.). Но что-то пошло не так...
Сильно через задницу, на скорую руку, ненадёжно, но работает:
Вообще-то задание странное. Если такое делать по нормальному, без подчерков между словами, без начального подчерка, с контролем выхода за границы массивов, то кода будет наверное раза в 2-3 больше.
Кстати, я не понял зачем тут вводить строку посимвольно. Можно было бы использовать gets() — всё равно нет контроля границ массива (или gets_s() — с контролем).
Огромное спасибо). Не могли бы Вы объяснить вот этот фрагмент:
Что тут вообще происходит? Как описать это в построении блок-схемы?
Описание функции strtok() см. здесь
Описание функции strstr() см. здесь
Единственно, что можно рассмотреть подробнее, это выражение
pos - token + aya_len == strlen(token)
.pos
— адрес начала совпадения окончания прилагательного; значениеpos
можно использовать, поскольку первая проверкаpos != NULL
дала истину.token
— адрес начала лексемы; значениеtoken
можно использовать, поскольку проверкаtoken != NULL
в операторе while дала истину.pos - token
— количество символов от начала лексемы до начала окончания.aya_len
— длина окончания (количество символов в окончании).Следовательно, выражение
(pos - token) + aya_len
должно быть равно полной длине лескмы, т.е.strlen(token)
. Если сочетание символов «aya» находится не в конце лексемы (т.е. это не окончание прилагательного), то равенство выполняться не будет.Правда можно сконструировать случай, когда и эту проверку можно обмануть, например _kayakerskaya_istoria. Т.е., по хорошему, ещё надо потребовать, что бы проверяемое в if «aya» было последним вхождением в лексеме.
А вот с рисованием блок-схем у меня всегда была напряжёнка. Так что это без меня ))
Теперь разобралась)
Еще раз большое спасибо)