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