Оставить только два пробела в строке, если число пробелов больше 3 - C (СИ)
Формулировка задачи:
Добрый вечер. В универе начали недавно изучать СИ. У меня возникли трудности с заданием. Пользователь вводит строку. Суть задания заключается в том, чтобы оставить только два пробела, если число последовательно введенных пробелов превышает цифру(или равно) 3. Если их число меньше 3 , то ничего не делать.
Например:
input:
hello___world__hello_p
output:
hello__world__hello_p
Можете дать какую нибудь идею для реализации или псевдокод
Решение задачи: «Оставить только два пробела в строке, если число пробелов больше 3»
textual
Листинг программы
#include <stdio.h>
char* del_ch(char* s, char c, int n){
int i;
char* p = s, *t = s;
while((*p = *s) != '\0'){
if(*s == c){
i = 1;
do {
if(i++ < n)
++p;
++s;
} while(((*p = *s) != '\0') && (*s == c));
continue;
} else
++p;
++s;
}
return t;
}
int main(void) {
char s1[] = "_hello___world__hello_p<br>end_____";
char s2[] = " hello, world fin";
puts(s1);
puts( del_ch(s1, '_', 3) );
putchar('\n');
puts(s2);
puts( del_ch(s2, ' ', 3) );
return 0;
}
Объяснение кода листинга программы
- В функции
del_chпервым делом инициализируются две переменные: указательpна первый символ строкиsи указательtна начало строкиs. - В цикле
whileпроисходит сравнение каждого символа строкиsс символомc. Если символы совпадают, то выполняется блок кода, который удаляет все символыcдо тех пор, пока не будет найдет символ, не равныйc, или пока не будет найдено нужное количество символовc. - В основной функции
mainсначала выводится исходная строкаs1, затем строка, полученная после удаления лишних пробелов_hello___world__hello_p______end_____» с помощью функцииdel_ch, и в конце выводится символ новой строки\n`. - Затем выводится исходная строка
s2, затем строка, полученная после удаления лишних пробеловhello, world finс помощью функцииdel_ch, и в конце выводится символ новой строки\n. - Функция
del_chвозвращает указатель на начало строкиs(т.е. на первый символ).