Очень нужно написать программу, которая удаляет лишние пробелы в тексте: 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);
}

Объяснение кода листинга программы

  1. В программе определена функция squeeze_spaces, которая принимает в качестве аргумента указатель на строку и возвращает указатель на эту же строку, но без лишних пробелов.
  2. В функции squeeze_spaces используется цикл for, который проходит по каждому символу строки.
  3. Если текущий символ является пробелом (*p == ' '), то в цикле while проверяется, следует ли за ним еще один пробел.
  4. Если следующий символ является пробелом, то с помощью функции memmove он перемещается на следующую позицию в строке, т.е. два пробела заменяются одним.
  5. В функции main определены массив строк strings и переменная i, которая используется в цикле для получения пользовательского ввода.
  6. Цикл for запрашивает у пользователя ввод строк до тех пор, пока не будет введено нужное количество строк.
  7. Если пользователь вводит меньше строки, чем ожидается, или вводит некорректные данные, программа выводит сообщение об ошибке и завершается с кодом 1.
  8. После получения всех строк программа выводит их на экран в отформатированном виде, предварительно применив функцию squeeze_spaces для удаления лишних пробелов.
  9. В конце программы вызывается функция system(pause), чтобы программа ожидала нажатия клавишиВвод` перед завершением.
  10. Программа завершается с кодом 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы