Написать программу удаления заданного символа из введенной пользователем строки - 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(), которая удаляет указанный символ из строки и возвращает измененную строку. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д