Как заменить символ в строке звездочкой? - 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.