Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку - C (СИ)
Формулировка задачи:
Выполнить поиск подстроки внутри данной строки,замену найденной подстроки на другую строку
Пример
Исходная строка:
aaaabbbaaa
Заменяемая подстрока: bbb
Заменяющая подстрока: сссс
Результат:аааассссааа
Пока получается только вот что
#include <cstdlib>
#include <iostream>
#include <string>#include <stdio>
using namespace std;
int main(int argc, char *argv[])
{char q[80];
int i;
printf(" Введите строку\n");
scanf("%s",q);
i=0;
while(q[i]!='\0')
{if(q[i]!='a')
q[i]='c';
i++;}
printf(" результат:%s",q);
system("PAUSE");
return EXIT_SUCCESS;
}Решение задачи: «Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main(){
char *text="bbbbbbaaaaabbbbb", res[BUFSIZ], *sWhat="bbb", *sWith="cccc"
, *a=text, *b=res;
for(; *b=*a; ++a, ++b){
if(!strncmp(a, sWhat, strlen(sWhat))){
strcpy(b, sWith);
a+=strlen(sWhat)-1;
b+=strlen(sWith)-1;
}
}
puts(res);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками
- Объявление переменных: — text — исходная строка — res — строка, в которую будет производиться замена — sWhat — подстрока, которую необходимо найти — sWith — подстрока, на которую необходимо заменить найденную подстроку — a — указатель на текущий символ в исходной строке — b — указатель на текущий символ в результирующей строке
- Итерация по символам исходной строки
- Проверка условия: если текущий символ исходной строки совпадает с первым символом подстроки sWhat (не учитывая регистр), то
- Копирование подстроки sWith в результирующую строку
- Переход к следующему символу в исходной и результирующей строках
- Вывод результирующей строки
- Возврат 0, означающий успешное выполнение программы