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

Функция доводит длину строки до заданной, вставляя пробелы между словами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Во всех последовательностях положительных чисел ограничить снизу значения тех элементов, значения которых меньше среднего для этой последовательности http://www.cyberforum.ru/cpp-beginners/thread148602.html
Помогите с кодом программы на С Во всех последовательностях положительных чисел ограничить снизу значения тех элементов, значения которых меньше среднего для этой последовательности, Размерность 200, диапозон значений -100 до 100
C++ string и массив строк у меня массив строк = 'aaaaaaaa'; = 'xxx()'; = 'ddddd'; = 'eeeeee'; потом нужно вместо потом нужно вместо xxx() вставить нескольк строк в первый массив так чтобы у первого массива изменились индексы и как будто так было сначало. http://www.cyberforum.ru/cpp-beginners/thread148592.html
C++ приоритеты операций
Интересную ошибку нахожу в книгах по части приоритетов операций в C++: например здесь и здесь указано, что у косвенности (*) больший приоритет чем у индексации (например), если бы это было действительно так то выражение int* a обозначало бы указатель на массив из пяти int.. на самом деле это массив из пяти указателей на int. в одной из тем была дана ссылка на всеми любимую википедию. здесь...
Строки и указатели с++ C++
1. С клавиатуры вводится полный путь к файлу. Напишите программу, которая выделяет из этой строки имя файла Пример: C:\windows\system32\activeds.dll activeds.dll 2. Напишите программу, которая выводит второе слово предложения введенного пользователем. Пример: Сидоров Петр Иванович Петр 3. Напишите программу, которая определяет есть ли в строке введенное пользователем слово. Пример:
C++ Реализация связного списка http://www.cyberforum.ru/cpp-beginners/thread148542.html
надо решить задачу: Сведения о владельце автомобиля: фамилия, марка автомобиля (строки), номер автомобиля (целое число). По сведениям в файле о некотором количестве владельцев автомобилей получить список владельцев автомобилей указанной марки, отсортированных по возрастанию номеров автомобилей. Выдать соответствующее сообщение, если автомобилей данной марки нет. #include<iostream> using...
C++ Не компилируется программа из книги Переписал из книги первую простейшую программу для Win32 a simple message box #define WIN32_LEAN_AND_MEAN #include <windows.h> // the main windows headers #include <windowsx.h> // a lot of cool macros // main entry point for all windows programs int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2010, 17:39     Функция доводит длину строки до заданной, вставляя пробелы между словами
о, как!
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
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct WRD {
    char * text;
    int len;
    struct WRD * next;
} wrd_t;
 
wrd_t * new_word(const char * s, wrd_t * last){
    wrd_t * w;
    if ( ( w = (wrd_t*)malloc(sizeof(wrd_t)) ) == NULL )
        return NULL;
    if ( ( w->text = strdup(s) ) == NULL ){
        free(w);
        return NULL;
    }
    w->len = strlen(w->text);
    w->next = NULL;
    if ( last )
        last->next = w;
    return w;
}
 
int words_len(const wrd_t * w){
    int len = 0;
    while ( w ){
        len += w->len;
        w = w->next;
    }
    return len;
}
 
void delete_words(wrd_t * w){
    wrd_t * t;
    while ( w ){
        t = w->next;
        free(w->text);
        free(w);
        w = t;
    }
}
 
char * justify(const char * s, const char * delim, int width){
    char * bufIn, * bufOut, * pBuf, * pWrd;
    int regular, extra, len, cnt, i;
    wrd_t * first, * last, * cur;
 
    if ( ( bufIn = strdup(s) ) == NULL )
        return NULL;
    cnt = 0;
    first = last = NULL;
    for ( pWrd = strtok(bufIn, delim); pWrd; pWrd = strtok(NULL, delim) ){
        if ( ( last = new_word(pWrd, last) ) == NULL ){
            if ( first )
                delete_words(first);
            return NULL;
        }
        if ( ! first )
            first = last;
        ++cnt;
    }
    free(bufIn);
 
    if ( ! first )
        return NULL;
    if ( cnt == 1 ){
        bufOut = strdup(first->text);
        delete_words(first);
        return bufOut;
    }
 
    len = words_len(first);
    if ( len + cnt - 1 > width ){
        bufOut = strdup("Too long!");
        delete_words(first);
        return bufOut;
    }
 
    if ( ( bufOut = (char*)malloc(width + 1) ) == NULL ){
        delete_words(first);
        return NULL;
    }
    regular = (width - len) / (cnt - 1);
    extra = (width - len) % (cnt - 1);
    pBuf = bufOut;
    for ( cur = first; cur != NULL; cur = cur->next ){
        if ( ! memcpy(pBuf, cur->text, cur->len) ){
            free(bufOut);
            delete_words(first);
            return NULL;
        }
        pBuf += cur->len;
        if ( cur->next ){
            for ( i = 0; i < regular; ++i )
                *pBuf++ = ' ';
            if ( extra ){
                *pBuf++ = ' ';
                --extra;
            }
        }
    }
    *pBuf = '\0';
    delete_words(first);
    return bufOut;
}
 
#define WIDTH 60
#define DELIM " \t\n"
 
int main(void){
    char buf[BUFSIZ], * p;
 
    while ( 1 ){
        printf("> ");
        if ( ! fgets(buf, BUFSIZ, stdin) ){
            perror("fgets");
            exit(EXIT_FAILURE);
        }
        if ( *buf == '\n' )
            break;
        if ( p = justify(buf, DELIM, WIDTH) ){
            printf("%s\n", p);
            free(p);
        }
        else {
            fprintf(stderr, "Memory or other error!\n");
            exit(EXIT_FAILURE);
        }
    }
 
    exit(EXIT_SUCCESS);
}
Функция доводит длину строки до заданной, вставляя пробелы между словами
 
Текущее время: 05:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru