Как заменить символ в строке звездочкой? - C (СИ)
Формулировка задачи:
Преобразовать строку, заменяя каждую цифру соответствующим ей числом символов нижнего подчеркивания. Например: «3 слона» => «*** слона»
у меня почему то не заменяет. Что не так?
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <windows.h> #define N 100 int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); setlocale(LC_CTYPE,"Russian"); char stroka[N]; int n; int i; int t; puts("\n Введите строку"); gets(stroka); n=strlen(stroka); printf(" количество символов %d", n); // считывает строку for(i=0;i<n;i++) if( stroka[i] == 1) { stroka[i] ='*'; } else if(stroka[i]==2) { stroka[i]='**'; } else if( stroka[i] == 3){ stroka[i] ='***' ; } else if( stroka[i] == 4){ stroka[i] ='****'; } else if( stroka[i] == 5){ stroka[i] ='*****'; } else if( stroka[i] == 6){ stroka[i] ='******'; } else if( stroka[i] == 7){ stroka[i] ='*******'; } else if( stroka[i] == 8){ stroka[i] ='********'; } else if( stroka[i] == 9){ stroka[i] ='*********';} printf(" \n Ваша строка: %s ", stroka); return 0; }
Решение задачи: «Как заменить символ в строке звездочкой?»
textual
Листинг программы
#include <stdio.h> #include <string.h> int main() { char s[100]; char s2[300]; int k = 0; bool flag; gets(s); for (int i = 0; i <strlen(s); i++) { flag = false; for (int j = 1; j<=9;j++) { if (s[i] == j + '0') { for (int temp = 0; temp < j; temp++){ s2[k] = '*'; k++; flag = true; } } } if (!flag) { s2[k] = s[i]; k++; } } s2[k] = '\0'; puts(s2); }
Объяснение кода листинга программы
В этом коде заменяют все цифры в строке на звездочки, используя два вложенных цикла. Вот список действий:
- Вводят строку s с помощью функции gets.
- Инициализируют переменную k = 0, которая будет использоваться для записи в строку s2.
- Инициализируют переменную flag = false, которая будет использоваться для контроля замены цифры.
- Происходит два вложенных цикла: a. Внешний цикл проходит по всем символам строки s. b. Внутренний цикл проверяет, является ли текущий символ цифрой. Если да, то выполняется еще один вложенный цикл: i. Этот цикл проходит по всем символам, которые меньше текущей цифры. ii. Если текущий символ равен символу, следующему за текущей цифрой (например, '1' после '0'), то заменяют этот символ на '*' в строке s2 и увеличивают k на 1. iii. Если текущий символ не равен символу, следующему за текущей цифрой, то записывают текущий символ из строки s в строку s2 и увеличивают k на 1.
- Если внутренний цикл завершился без замены символа, то записывают символ из строки s в строку s2 и увеличивают k на 1.
- В конце добавляют символ '\0' в строку s2.
- Выводят строку s2 с помощью функции puts.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д