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