Написать программу удаления заданного символа из введенной пользователем строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу удаления заданного символа из введенной пользователем строки как нибудь по проще

Решение задачи: «Написать программу удаления заданного символа из введенной пользователем строки»

textual
Листинг программы
#include <conio.h> 
#include <stdio.h>
#include <string.h>
 
char *str_del(char *where, char what);
 
void main()
{   int a;
    char s[128], c;
    cputs("String:");
    gets(s);
    cputs("Char:");
    c = getchar();
    printf("result: %s", str_del(s,c));
    
};
 
char *str_del(char *where, char what)
{
_asm{   
    mov edi, where
    push    edi
    call    strlen
    add esp, 4
    mov ecx, eax    ; strlen(where)
    inc ecx
    mov esi, edi
    mov ah, what
_loop:  lodsb
    cmp ah, al
    jz  nxt
    stosb
nxt:    loop    _loop
    stosb
};
return where;
};

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

В этом коде написана программа удаления заданного символа из введенной пользователем строки. Список действий:

  1. Ввод данных: Сообщение String: с помощью функции cputs() выводит предложение для ввода строки. Введенная пользователем строка сохраняется в массив s с помощью функции gets(). Сообщение Char: выводит предложение для ввода символа. Введенный символ сохраняется в переменную c с помощью функции getchar().
  2. Вычисления: Функция str_del() вызывается с двумя аргументами: where и what. where - это адрес строки, в которой нужно удалить символ, а what - это сам символ, который нужно удалить. Функция str_del() возвращает указатель на измененную строку.
  3. Реализация функции str_del(): С помощью ассемблерного блока кода, написанного с использованием инструкций процессора, выполняется следующая последовательность действий:
    • Значение длины строки (strlen(where)) сохраняется в регистре ecx.
    • Переменная where копируется в переменную esi.
    • В регистр ah записывается значение символа, который нужно удалить (what).
    • Используя цикл _loop, происходит последовательное чтение байтов строки, начиная с первого.
    • Если текущий байт (ah) равен символу, который нужно удалить (al), то этот байт пропускается (jz nxt).
    • Если текущий байт не равен символу, который нужно удалить, то он записывается обратно в строку (stosb).
    • После прохода по всей строке, в конец строки добавляется символ '\0' (stosb).
    • Возвращается адрес строки (where).
  4. Вывод результата: Результат работы функции str_del() выводится на экран с помощью функции printf() и оператора %s. Таким образом, после ввода строки и символа для удаления, программа вызывает функцию str_del(), которая удаляет указанный символ из строки и возвращает измененную строку. Результат выводится на экран.

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


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

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

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