Работа со строками: в тексте поменять местами заданные словосочетания - C (СИ)
Формулировка задачи:
помогите пожалуйста, нужно написать программу, которая нужно ввести текст, ввести 2 словосочетания и в тексте поменять местами словосочетания
Решение задачи: «Работа со строками: в тексте поменять местами заданные словосочетания»
textual
Листинг программы
{
char text[50],slovo1[25],slovo2[25];
char *arr2;
char *arr3;
printf("\nвведите строку\n");
getchar();
gets(text);
printf("Слово 1: \n");
gets(slovo1);
j=strlen(slovo1);
printf("Слово 2: \n");
gets(slovo2);
n=strlen(slovo2);
for(i=0;i<strlen(text);i++)
{
arr2=(char*) malloc(i*sizeof(int));
arr2 = strstr(text,slovo1);
arr3=(char*) malloc(i*sizeof(int));
arr3 = strstr(text,slovo2);
}
for(i=0;i<strlen(text);i++)
{
if // тут хотел написать замену
}
}
printf("\n%s\n", text);
fflush(stdin);
Объяснение кода листинга программы
- Объявлены массивы для хранения текста и двух слов:
text[50],slovo1[25],slovo2[25]. - Создаются две переменные типа
char*для хранения указателей на подстроки:arr2,arr3. - Выводится приглашение для ввода строки.
- Считывается строка с помощью функции
gets(text). - Выводится приглашение для ввода первого слова.
- Считывается первое слово с помощью функции
gets(slovo1). - Вычисляется длина первого слова с помощью функции
strlen(slovo1). - Выводится приглашение для ввода второго слова.
- Считывается второе слово с помощью функции
gets(slovo2). - Вычисляется длина второго слова с помощью функции
strlen(slovo2). - В цикле
forначиная сi=0и доstrlen(text)ищутся подстроки первого и второго слова в тексте с помощью функцииstrstr(text,slovo1)иstrstr(text,slovo2). - В каждой итерации цикла выделяется память под строку с помощью функции
malloc(i*sizeof(int)). - Если слово найдено, то указатель на подстроку сохраняется в соответствующей переменной
arr2илиarr3. - После завершения цикла, в цикле
forначиная сi=0и доstrlen(text)происходит замена подстрок. - Выводится исходная строка с помощью функции
printf(\n%s\n, text). - Очищается буфер ввода с помощью функции
fflush(stdin).