Очень нужно написать программу, которая удаляет лишние пробелы в тексте: 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, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д