Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 9 / 0
Регистрация: 03.02.2015
Сообщений: 103
1

Упражнение 1.18 Удаление лишних пробелов, табуляций и строк

07.05.2018, 22:30. Просмотров 1003. Ответов 1
Метки нет (Все метки)

Упражнение 1.18. Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд
символы пробелов и табуляций на один пробел и удалять пустые строки.

Написал как смог, вроде работает хорошо. Плюсом ко всему, если предложение не закончено, программа не переводит текст на новую строку. Табуляция возможна только с красной строки. Такого варианта решения тут не видел. Собственно код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*Упражнение 1.18. Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд
символы пробелов и табуляций на один пробел и удалять пустые строки.*/
 
//Максимальный размер строки - 1000 символов.
//Максимальный размер всего текста - 10 000 символов.
 
#include <stdio.h> //Библиотека ввода/вывода.
#include <locale.h>//Библиотека, отвечающая за локализацию (поддержку русского языка).
 
int getline(char line[], int lim);
void copy(char to[], char from[], int flag);
#define MAXLINE 1000 //максимальный размер одной строки 1000 символов
main()
{
    setlocale(LC_ALL, "RUS");
    int len;
    int max = 0; // переменная, в которую будет запоминаться кол-во уже занятых ячеек массива longest
    char line[MAXLINE];//текущая строка
    char longest[10000];//общий массив всего что было введено, максильный размер вводимого текста 10 000 символов
    char PRINT[10000];//массив отформатированного текста для выдачи
    int i = 0;//счётчик
    int p = 0;//счётчик
 
    printf("Внимание!\nМаксимальный размер строки 1000 символов.\nМаксимальный размер всего вводимого текста 10 000 символов.\n****Введите текст для форматирования:****\n");
 
    while ((len = getline(line, MAXLINE))>0)
    {
        {
            copy(longest, line, max);
            max = max + len;
        }
    }
 
    for (i = 0; i <= max; i++)
    {
        if (longest[i] != ' ' && longest[i] != '\t' && longest[i] != '\n')//Если символ не пробел, не табуляция и не красная строка, то он печатается.
        {
            PRINT[p] = longest[i];
            p++;
        }
 
        else if (i == 0 && (longest[i] == ' ' || longest[i] == '\t'))//Пробел или табуляция печатаются, если это первый символ в тексте.
        {
            PRINT[p] = longest[i];
            p++;
        }
 
        else if (longest[i] == '\n' && PRINT[p - 1] != '\n' && PRINT[p - 1] == '.')//Красная строка печатается, если сразу перед ней не было красной строки и предложение закончено.
        {
            PRINT[p] = longest[i];
            p++;
        }
 
        else if (longest[i] == '\n' && longest[i - 1] != '.' && longest[i - 1] != '\n')//Печатает обычный пробел вместо красных строк, если предложение не закончено.
        {
            PRINT[p] = ' ';
            p++;
        }
 
        else if (longest[i] == ' ' && PRINT[p - 1] != ' ' && PRINT[p - 1] != '\t' && PRINT[p - 1] != '\n')//Пробел печатается, если до него нет пробела, табуляции и знака новой строки.
        {
            PRINT[p] = longest[i];
            p++;
        }
 
        else if (longest[i] == ' ' && PRINT[p - 1] == '\n' && PRINT[p - 2] == '.')//Пробел печатается, если это новое предложение с новой строки.
        {
            PRINT[p] = longest[i];
            p++;
        }
 
        else if (longest[i] == '\t' && PRINT[p - 1] != '\t' && PRINT[p - 1] != ' ' && PRINT[p - 1] != '\n')// Вместо табуляций печатается пробел, если до нет табуляции, пробела и красной строки.
        {
            PRINT[p] = ' ';
            p++;
        }
 
        else if (longest[i] == '\t' && PRINT[p - 1] == '\n' && PRINT[p - 2] == '.')//Табуляция печатется, если это новое предлжение с новой строки.
        {
            PRINT[p] = longest[i];
            p++;
        }
    }
    printf("\n****Ваш текст был отформатирован, ибо так верстают только чудаки:****\n%s\n****Конец текста.****\n", PRINT);
    printf("\nРабота программы завершена, нажмите любую клавишу.");
    _getch();
    return 0;
}
 
int getline(char s[], int lim) {
    int c, i;
    for (i = 0; i < (lim - 1) && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
 
void copy(char to[], char from[], int flag)
{
    int i;
    i = 0;
    while ((to[i + flag] = from[i]) != '\0')
        ++i;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2018, 22:30
Ответы с готовыми решениями:

Программа для удаления лишних пробелов, табуляций, строк в файле (Си)
Здравствуйте. Помогите написать программу (Си), которая удаляла бы лишние пробелы, табуляции и...

Исправить код, программа избавления от лишних пробелов и табуляций
#include &lt;stdio.h&gt; #include &lt;string.h&gt; int del (char a, int sz) //избавляемся от лишних...

Удаление лишних пустых строк и пробелов на конце строки
open(FIL,&quot;azaz.txt&quot;); my @s =&lt;FIL&gt;; close FIL; for ($i=0; $i &lt;= 9; $i++) { if ( length( $s ) &gt;...

Удаление лишних переводов на новую строку с удалением лишних пробелов
Добрый вечер, форумчане! Прошу помочь. Из текста необходимо удалить лишние знаки пробелов и...

1
248 / 190 / 90
Регистрация: 11.08.2016
Сообщений: 681
08.05.2018, 07:47 2
Таки и зачем тогда выложили код ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2018, 07:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сжатие строки (удаление пробелов и табуляций), найти ошибку
Ввести с клавиатуры строку. Сжать строку, т.е. удалить про¬белы и табуляции. Вывести результаты на...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со...

Удаление лишних пробелов
Товарищи! Возникла сложность с удалением лишних пробелов из предложения из 2х слов &quot;новый год&quot; в...

Удаление лишних пробелов...
Случайно наткнулся, как можно заменить 2 и более любых пробелов (обычные и неразрывные) на один...

Удаление лишних пробелов
Помогите пожалуйста с задачей: Разработать алгоритм и программу для удаления лишних пробелов в...

Удаление лишних пробелов
Задачи 1)Определите, является ли заданная строка правильной записью идентификатора по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.