товарисчи, нужна помощь! пытаюсь реализовать функцию со строками, (не используя класс string!!!) и тут столкнулся с небольшой проблеммой. Объясняю суть: существует две си-строки, предположим, s1 = "how do you feel" и s2 = "how". программа должна найти строку s2 в строке s1, и если такая найдется - s1 должен избавиться от строки s2, то есть на выходе должно получиться " do you feel". С поиском элементов проблем никаких нет, а вот с удалением я немного застрял. писал как s1[i] = s1[i + strlen(s2)] (с соответствующим условием, конечно), но, разумеется, ошибка. и тут вопрос : как сдвинуть строку на нужное кол-во элементов без методов string?
Буду весьма благодарен за помощь
желательно, конечно, все, но с этим т я справлюсь
главное эту проблему решить
я вот, честно говоря, не понимаю, может ли проблема заключаться в том, что я задал переменную как char* s, а потом использовал s[i]?
Ну, вообще, я ещё и пробовал *(s+i), но в любом случае ничего не выходит!
вот такая гадкая штука выдаётся
shvaidahder, 1. ПОВТОРЯЮ, вызывать strlen в цикле неоптимально.
2. У вас совершенно неверное условие остановки цикла. Которое выполнится, когда i переполнится.
shvaidahder,
"horror" (и вообще любой строковый литерал) находится в сегменте данных, предназначенном только для чтения, имеет тип char const* (или const char*) и не позволяет переприсваивания.
shvaidahder, Условия, что стоит чуть выше, я не вижу.
При каком условии перестанет выполняться неравенство i < i + (что-то там)? Когда сумма в правой части переполнится! То есть цикл выполнит 2 млрд итераций.
Вам просто нужно скопировать остаток строки в начало найденной подстроки.
Думаю лучше всего воспользоваться функцией стандартной Си библиотеки memmove().
И в конце не забудьте воткнуть нулевой символ.