Перед каждым символом * (звёздочка) вставить символ + (плюс) - 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 уменьшается на единицу.
- После завершения внешнего цикла, все символы
*
заменены на символ+
. Список изменений: - Замена каждого символа
*
на символ+
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д