Перед каждым символом * (звёздочка) вставить символ + (плюс) - C (СИ)
Формулировка задачи:
По условиям нужно получать char[] с помощью
Вот моя попытка вставить плюс перед звёздочкой:
Видимо, я запутался в индексах, но уже битый час не догоняю, где именно. Подскажите, пожалуйста.
gets()
, что я и делаю, других вариантов нет. Функция len() - пользовательская. Чтобы не было вопросов, вот её код под спойлером.int len(char s[]) {
int i = 0;
while (s[i] != '\0') i++;
return i;
}for (int i=0; s[i] != '\0'; i++) {
if (s[i-1] == '*') {
for (int j = len(s); j < i; j--) {
s[j+1] = s[j]; // сдвигаем элементы на один
}
s[i] = '+'; // здесь происходит вставка, которая кривая
}Решение задачи: «Перед каждым символом * (звёздочка) вставить символ + (плюс)»
textual
Листинг программы
for (int i=0; s[i]; i++)
if (s[i] == '*') {
for (size_t j = strlen(s); j >= i; j--)
s[j+1] = s[j];
s[i++] = '+';
}
Объяснение кода листинга программы
В данном коде решается задача по замене каждого символа * на символ + в строке, представленной в переменной s.
- Переменная i используется как счётчик для прохода по каждому символу в строке.
- Переменная s[i] проверяется на ненулевой статус, чтобы избежать выхода за пределы строки.
- Если текущий символ равен
*, то выполняется следующий код. - Переменная j инициализируется как длина строки, которую необходимо уменьшать на каждом шаге внешнего цикла.
- На каждой итерации внешнего цикла, один из символов внутреннего цикла заменяется на символ
+. - Значение переменной i увеличивается на единицу после каждой итерации внутреннего цикла.
- После завершения внутреннего цикла, значение переменной i становится равным
*. - Внутренний цикл завершается, и значение переменной j уменьшается на единицу.
- После завершения внешнего цикла, все символы
*заменены на символ+. Список изменений: - Замена каждого символа
*на символ+.