Форум программистов, компьютерный форум, киберфорум
Наши страницы

Выравнивание текста пробелами по ширине. - 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>...
C++ Сформировать из считаных из файла чисел матрицу, содержащую 4 столбца http://www.cyberforum.ru/cpp-beginners/thread1180933.html
Привет всем, помогите исправить код для программы. Задание. В каждом из заданий исходный файл формировать программно. Количество элементов исходного файла неизвестно. Методические рекомендации. ...
C++ OpenSSL и Triple-DES Нужна помощь. В проге использую Openss для шифрования Triple-DES.Ну вот в чем беда, при расшифровки последние символы не совпадают, а если быть точнее последние символы, которые входят в последний... подробнее

Показать сообщение отдельно
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');
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.