Использование библиотечных функций для работы с символьными данными - C (СИ)
Формулировка задачи:
Нужна помощь, не знаю как переделать эту программу полностью на библиотечные функции типа :strcpy() strchr() и прочих. Не меняя суть работы программы.
/*Ввести с клавиатуры предложение.
Произвести вставку запятой после слов заканчивающихся на "й".
Вывести на экран количество таких вставок.*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main ()
{
char S1[100]; char S2[100];
int i=0,j=0,k=0;
printf("\n Vvedite slova: ");
gets(S1);
while (S1[i]!='\0')
{
S2[j++]=S1[i++];
if ((S1[i-1]=='i')&&(S1[i]==' ')){
S2[j++]=',';
k++;
}
}
S2[j]='\0';
printf("\n %s",S2);
printf("\n %d",k);
gets(S2);
}Решение задачи: «Использование библиотечных функций для работы с символьными данными»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
void main()
{
char *s = malloc(80), *p,*q;
int jx, cnt = 0;
cputs("Enter string:");
gets(s);
p = malloc(strlen(s)+10);
p[0]=0;
while(q = strstr(s,"й "))
{ jx = q - s;
strncat(p,s,jx+1);
strcat(p,", ");
s = s +jx+2;
cnt++;};
strcat(p,s);
printf("inserted:%d: %s",cnt,p);
getch();
};
Объяснение кода листинга программы
- Включаются необходимые библиотеки
- Создаются и инициализируются переменные:
- s - указатель на выделенную память для строки
- p - указатель на выделенную память для подстрок
- q - указатель на временную переменную для поиска подстроки
- jx - переменная для хранения индекса подстроки
- cnt - счетчик количества найденных подстрок
- Выводится сообщение с приглашением ввести строку
- Вводится строка с помощью функции gets(s)
- Выделяется память под строку p с запасом в 10 символов
- Первый символ строки p устанавливается в ноль
- В цикле while происходит поиск подстроки
йв строке s- переменная jx хранит разницу между адресами начала подстроки и строки
- с помощью функции strncat(p,s,jx+1) к строке p добавляется подстрока s, начиная с позиции jx
- с помощью функции strcat(p,
,) к строке p добавляется запятая и пробел - s = s +jx+2 - смещается указатель на строку s, чтобы пропустить найденную подстроку
- cnt увеличивается на единицу
- После выхода из цикла, к строке p добавляется оставшаяся часть строки s
- Выводится сообщение с количеством найденных подстрок и итоговой строкой p
- Ожидается нажатие клавиши с помощью функции getch()