Написать программу удаления заданного символа из введенной пользователем строки - 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; };
Объяснение кода листинга программы
В этом коде написана программа удаления заданного символа из введенной пользователем строки. Список действий:
- Ввод данных:
Сообщение
String:
с помощью функции cputs() выводит предложение для ввода строки. Введенная пользователем строка сохраняется в массив s с помощью функции gets(). СообщениеChar:
выводит предложение для ввода символа. Введенный символ сохраняется в переменную c с помощью функции getchar(). - Вычисления: Функция str_del() вызывается с двумя аргументами: where и what. where - это адрес строки, в которой нужно удалить символ, а what - это сам символ, который нужно удалить. Функция str_del() возвращает указатель на измененную строку.
- Реализация функции str_del():
С помощью ассемблерного блока кода, написанного с использованием инструкций процессора, выполняется следующая последовательность действий:
- Значение длины строки (strlen(where)) сохраняется в регистре ecx.
- Переменная where копируется в переменную esi.
- В регистр ah записывается значение символа, который нужно удалить (what).
- Используя цикл _loop, происходит последовательное чтение байтов строки, начиная с первого.
- Если текущий байт (ah) равен символу, который нужно удалить (al), то этот байт пропускается (jz nxt).
- Если текущий байт не равен символу, который нужно удалить, то он записывается обратно в строку (stosb).
- После прохода по всей строке, в конец строки добавляется символ '\0' (stosb).
- Возвращается адрес строки (where).
- Вывод результата: Результат работы функции str_del() выводится на экран с помощью функции printf() и оператора %s. Таким образом, после ввода строки и символа для удаления, программа вызывает функцию str_del(), которая удаляет указанный символ из строки и возвращает измененную строку. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д