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

Объяснение кода листинга программы

В этом коде заменяют все цифры в строке на звездочки, используя два вложенных цикла. Вот список действий:

  1. Вводят строку s с помощью функции gets.
  2. Инициализируют переменную k = 0, которая будет использоваться для записи в строку s2.
  3. Инициализируют переменную flag = false, которая будет использоваться для контроля замены цифры.
  4. Происходит два вложенных цикла: a. Внешний цикл проходит по всем символам строки s. b. Внутренний цикл проверяет, является ли текущий символ цифрой. Если да, то выполняется еще один вложенный цикл: i. Этот цикл проходит по всем символам, которые меньше текущей цифры. ii. Если текущий символ равен символу, следующему за текущей цифрой (например, '1' после '0'), то заменяют этот символ на '*' в строке s2 и увеличивают k на 1. iii. Если текущий символ не равен символу, следующему за текущей цифрой, то записывают текущий символ из строки s в строку s2 и увеличивают k на 1.
  5. Если внутренний цикл завершился без замены символа, то записывают символ из строки s в строку s2 и увеличивают k на 1.
  6. В конце добавляют символ '\0' в строку s2.
  7. Выводят строку s2 с помощью функции puts.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы