Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’ - C (СИ) (79029)
Формулировка задачи:
всем привет.
Дано такое задание..
Ввести массив строк символов (текст), которые могут содержать символы ‘*’. Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’.
пользователь должен символы вводить с клавиатуры
все нужно реализовать с помощью функций,
все надо написать в Си а не в си++
как все написать и сделать задание не знаю, помогите пож-та, заранее спасибо.
Решение задачи: «Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define SYMBOL '*'
int matches_count(const char * s, char ch){
int cnt;
char * p;
for ( cnt = 0, p = strchr(s, ch); p; ++cnt, p = strchr(++p, ch) )
;
return cnt;
}
int main(void){
char buf[BUFSIZ], * p;
int cnt, i;
printf("String: ");
scanf("%[^\n]", buf);
if ( ! ( cnt = matches_count(buf, SYMBOL) ) )
printf("%s", buf);
else
for ( p = buf; *p; ++p )
if ( *p != SYMBOL )
for ( i = 0; i < cnt + 1; ++i )
printf("%c", *p);
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Удаление всех символов '*' из текста.
- Повторение каждого символа, отличного от '*', два раза.
- Входные данные: строка, содержащая символы, включая '*'.
- Выходные данные: преобразованная строка, в которой все символы '' удалены, а каждый символ, отличный от '', повторяется два раза.
- В функции matches_count подсчитывается количество вхождений символа 'ch' в строке 's'.
- В функции main происходит следующее: a. Ввод строки с помощью scanf. b. Если в строке нет символа '', то выводится исходная строка. c. Если в строке есть символ '', то происходит следующее: i. Перебираются все символы в строке. ii. Если символ не равен '*', то он выводится дважды. iii. Выводится преобразованная строка.