Очень нужно написать программу, которая удаляет лишние пробелы в тексте: 2 и более пробелов заменяются одним - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, написать программу (есть часа 3-4, после этого можно не пытаться)), которая, запросив у пользователя максимально 9 строк длиной до 72 символов каждая, анализирует их и выводит на экран выходные строки с удаленными лишними пробелами: 2 и более пробелов заменяются одним.
Решение задачи: «Очень нужно написать программу, которая удаляет лишние пробелы в тексте: 2 и более пробелов заменяются одним»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * squeeze_spaces(char * s) {
char * p;
for ( p = s; *p; ++p )
if ( *p == ' ' )
while ( *(p + 1) == ' ' )
memmove(p + 1, p + 2, strlen(p + 1));
return s;
}
#define STRING_LENGTH 73
#define GET_STRING(s) ( scanf("%72[^\n]%*c", (s)) == 1 )
#define NUM_STRINGS 9
int main(void) {
char strings[NUM_STRINGS][STRING_LENGTH];
int i;
for ( i = 0; i < NUM_STRINGS; ++i ) {
printf("String #%d: ", i + 1);
if ( ! GET_STRING(strings[i]) ) {
fprintf(stderr, "Input error!\n");
exit(1);
}
}
printf("\nSqueezed spaces:\n");
for ( i = 0; i < NUM_STRINGS; ++i )
printf("%s\n", squeeze_spaces(strings[i]));
system("pause");
exit(0);
}
Объяснение кода листинга программы
- В программе определена функция
squeeze_spaces, которая принимает в качестве аргумента указатель на строку и возвращает указатель на эту же строку, но без лишних пробелов. - В функции
squeeze_spacesиспользуется циклfor, который проходит по каждому символу строки. - Если текущий символ является пробелом (
*p == ' '), то в циклеwhileпроверяется, следует ли за ним еще один пробел. - Если следующий символ является пробелом, то с помощью функции
memmoveон перемещается на следующую позицию в строке, т.е. два пробела заменяются одним. - В функции
mainопределены массив строкstringsи переменнаяi, которая используется в цикле для получения пользовательского ввода. - Цикл
forзапрашивает у пользователя ввод строк до тех пор, пока не будет введено нужное количество строк. - Если пользователь вводит меньше строки, чем ожидается, или вводит некорректные данные, программа выводит сообщение об ошибке и завершается с кодом 1.
- После получения всех строк программа выводит их на экран в отформатированном виде, предварительно применив функцию
squeeze_spacesдля удаления лишних пробелов. - В конце программы вызывается функция
system(pause), чтобы программа ожидала нажатия клавишиВвод` перед завершением. - Программа завершается с кодом 0, что означает успешное выполнение.