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

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

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

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

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

textual
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. char *str_del(char *where, char what);
  6.  
  7. void main()
  8. {   int a;
  9.     char s[128], c;
  10.     cputs("String:");
  11.     gets(s);
  12.     cputs("Char:");
  13.     c = getchar();
  14.     printf("result: %s", str_del(s,c));
  15.    
  16. };
  17.  
  18. char *str_del(char *where, char what)
  19. {
  20. _asm{  
  21.     mov edi, where
  22.     push    edi
  23.     call    strlen
  24.     add esp, 4
  25.     mov ecx, eax    ; strlen(where)
  26.     inc ecx
  27.     mov esi, edi
  28.     mov ah, what
  29. _loop:  lodsb
  30.     cmp ah, al
  31.     jz  nxt
  32.     stosb
  33. nxt:    loop    _loop
  34.     stosb
  35. };
  36. return where;
  37. };

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы