Замена слов в тексте - C (СИ)
Формулировка задачи:
uses crt;
var
str:string;
word1,word2:string[30];
len,position:byte;
begin
writeln('Введите слово-образец:');
readln(word1);
writeln('Введите слово-заменитель:');
readln(word2);
writeln('Введите исходную строку:');
readln(Str);
len:=length(word1);
position:=pos(word1,str);
while position<>0 do
begin
delete(str,position,len);
insert(word2,str,position);
position:=pos(word1,str)
end;
writeln(str);
readln;
end.Решение задачи: «Замена слов в тексте»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define STRSIZE 30
int main() {
char src[STRSIZE], dst[STRSIZE], str[STRSIZE], * p = str;
printf("Введите слово-образец: "); scanf("%s", src);
printf("Введите слово-заменитель: "); scanf("%s", dst);
printf("Введите исходную строку: "); scanf("%s", str);
int lenSrc = strlen(src);
int lenDst = strlen(dst);
while ((p = strstr(p, src))) {
memmove(p + lenDst, p + lenSrc, strlen(p + lenSrc) + 1);
memcpy(p, dst, lenDst);
p += lenDst;
}
printf("%s\n", str);
return 0;
}
Объяснение кода листинга программы
В этом коде осуществляется замена всех вхождений строки-образца на строку-заменитель в исходной строке. Вот список действий, которые происходят в коде:
- Ввод данных:
- Строка-образец:
scanf(%s, src); - Строка-заменитель:
scanf(%s, dst); - Исходная строка:
scanf(%s, str);
- Строка-образец:
- Вычисление длины строки-образца и строки-заменителя:
- Длина строки-образца:
int lenSrc = strlen(src); - Длина строки-заменителя:
int lenDst = strlen(dst);
- Длина строки-образца:
- Поиск первого вхождения строки-образца в исходной строке:
while ((p = strstr(p, src))): этот цикл будет выполняться до тех пор, пока не будет найдено следующее вхождение строки-образца.
- Перемещение символов в исходной строке, чтобы заменить строку-образец на строку-заменитель:
memmove(p + lenDst, p + lenSrc, strlen(p + lenSrc) + 1);
- Копирование строки-заменителя на место, где была найдена строка-образец:
memcpy(p, dst, lenDst);
- Перемещение указателя
pна следующую позицию, где нужно искать строку-образец:p += lenDst;
- Повторение шагов 3-6 до тех пор, пока не будет найдено следующее вхождение строки-образца.
- Вывод измененной исходной строки:
printf(%s\n, str);
- Возврат 0, чтобы указать, что программа успешно завершилась.