Форум программистов, компьютерный форум CyberForum.ru

Выравнивание текста пробелами по ширине. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму ряда http://www.cyberforum.ru/cpp-beginners/thread1180947.html
4. 4.3. Написать программу, позволяющую вычислить с помощью цикла: 2+4+6+…+2n, где n задается с клавиатуры.
C++ Написать программу, проверяющую, поместится ли круг в квадрат или наоборот. 3. Заданы круг площади S и квадрат площади Р. Написать программу, проверяющую, поместится ли круг в квадрат или поместится ли квадрат в круг, или они не поместятся друг в друга. http://www.cyberforum.ru/cpp-beginners/thread1180946.html
C++ Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартир
2. В N-этажном доме M подъездов. На каждой лестничной площадке К квартир. Нумерация квартир в доме сквозная, начиная с 1. Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартира.
C++ Переполнение буфера
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include <iostream> #include <conio.h> #include <ctime> #include <stdio.h> #include <iomanip> using namespace std;
C++ Сформировать из считаных из файла чисел матрицу, содержащую 4 столбца http://www.cyberforum.ru/cpp-beginners/thread1180933.html
Привет всем, помогите исправить код для программы. Задание. В каждом из заданий исходный файл формировать программно. Количество элементов исходного файла неизвестно. Методические рекомендации. Целесообразно для создания бинарного файла создать отдельную программу. Числа могут вводиться либо пользователем, либо счетчиком случайных чисел. Количество чисел в файле задавать случайным образом,...
C++ OpenSSL и Triple-DES Нужна помощь. В проге использую Openss для шифрования Triple-DES.Ну вот в чем беда, при расшифровки последние символы не совпадают, а если быть точнее последние символы, которые входят в последний блок. #include "mainwindow.h" #include "ui_mainwindow.h" #include <openssl/des.h> #define DES_BLOCK_SIZE 8 FILE *fp; FILE *op; FILE *rp; подробнее

Показать сообщение отдельно
oglazirin
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 3
19.05.2014, 16:22  [ТС]     Выравнивание текста пробелами по ширине.
Вообщем я нагуглил следующий код. В нем есть ошибки, но я сейчас пытаюсь понять как отредактировать его так, чтобы больше пробелов было справа...

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
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
void justifytext(char *mytext, int width);
void justifyline(char *line, int linewidth);
 
void main() {
 
    char sstr[] = "  ModelSim provides an Integrated Debug "
        "Environment that facilitates efficient design debug "
        "for SoC and FPGA based designs. This GUI has continuously "
        "evolved to include new windows and support for new languages. "
        "This application note aims to give an introduction to the "
        "ModelSim 6.0 debug environment. This environment is "
        "trilingual supporting designs based on VHDL, Verilog "
        "(all standards including SystemVerilog, Verilog 2001 "
        "and Verilog 1995), and SystemC. Subsequent releases of"
        " ModelSim will enable even more debug capabilities "
        "supporting higher levels of abstractions for verification"
        " and modeling in SystemVerilog and SystemC. In ModelSim"
        " 6.0, the GUI has been enhanced and is based on Multiple"
        " Document Interface (MDI) layout standard. In addition, "
        "the debug windows have been re-organized in such a way as"
        " to display design data and simulation results in an intuitive manner.";
 
    int twid;
    int slen = 0;
 
    slen = strlen(sstr); // Length of the input string
 
    printf("\nLength of your text : %d\n", slen);
 
    printf("Enter text width :");
    scanf("%d", &twid);
    printf("\nText Width %d\n", twid);
 
    justifytext(sstr, twid);
 
    printf("\n\n");
}
 
void justifytext(char *mytext, int width){
 
    char temp[100];//a string array for calling my second function
    int i, j, currenti, counter = 0;
 
    for (i = 0; isspace(mytext[i]); i++);        //if there is any space at the 
    memmove(mytext, &mytext[i], strlen(mytext));//beginning of the text, DELETED.
 
    i = 0;
    while (counter < (int)strlen(mytext)){//I choose such a control-loop, because I try
        //some other ways and this is most trustable.
 
        for (i, j = 0; j < width; i++, j++){//finding each parts of text to justify
            temp[j] = mytext[i];
        }
 
        for (i; !(isspace(mytext[i])); i--, j--);//I cannot sperate any word, 
        //looking for spaces
        currenti = i;                               //I will use it to start the next line
 
        for (i; isspace(mytext[i]); i--, j--);//This makes part of array suitable 
        //for my second function.
        counter = i; //for controlling loop     //my second function works for only 
        //strings that do not have spaces
        //neither at the begining nor at the end.
 
        for (++j; j < 100; j++) // only temp[++j] = '\0' is enough without for loop
            temp[j] = '\0';        // but this makes me relax
 
        justifyline(temp, width);
 
        i = currenti + 1;    // this is where I start to sperate next time
 
    }
}
 
void justifyline(char *line, int linewidth)
{
    char *temp;   // it for usage of strtok function
    int i, j, spaces = 0, spacestoshare = 0, equalshare = 0, extras = 0;
 
    for (i = 0; line[i] != '\0'; i++){  //counting spaces. Also this means likely 
        //how many words there
 
        if (isspace(line[i])){
            spaces++;
        }
    }
 
    spacestoshare = linewidth - strlen(line);
 
    if (spaces == 0){
        equalshare = spacestoshare + spaces; //if spaces zero, there is only a word means
        extras = 0;                        // I put all my spaces after the word. No extras
    }
 
    else {
        equalshare = (spacestoshare + spaces) / spaces;//How many spaces I will put between 
        //each word in equal
        extras = spacestoshare % spaces;           //Extra spaces to put
    }
 
    for (temp = strtok(line, " "); temp != NULL; temp = strtok(NULL, " ")){ //takes 
        //each word sperately
 
        printf("%s", temp); //first write one word
 
        for (j = 0; j < equalshare; j++) { // add spaces after the word
            putchar(' ');
        }
 
        if (extras != 0){ // if there is extra 
            putchar(' ');  //also add them
            extras--;
        }
 
    }
    putchar('\n');
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru