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

Добавление пробелов в строку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запись функцию на С++ http://www.cyberforum.ru/cpp-beginners/thread72138.html
F(x)=sin^2*(cos*(x^2-1)/cos*(x^2+1)) но я не знаю как это правильно записать на с++ путаюсь в расположении скобок и функций типа pow sqrt sin и т.д и т .п.
C++ Вывод чисел! Программа которая выводит числа на экран от нуля до бесконечности!!есть код только нужно добавить несколько строк!!как я понял с функцией atoi или atol. #include <iostream.h> int main() { int a; char b; long int count = 0; cout <<"vedite 4islo"; http://www.cyberforum.ru/cpp-beginners/thread72134.html
C++ Подпрограммы
Такой простенький вопросик - как вызвать из одной подпрограммы в другую переменую, точнее даже масив?
C++ Массив,нахождение отрезка max длины.
Уважаемые пользователи!!Помогите пожалуйста с написанием программы!!Только начала изучение и пропустила лекцию о массивах ,но как известно никому нет дела до пропусков(понимай как хочешь) )) Задача:Поиск отрезка максимальной длины в массиве. В одномерном массиве А из К элементов найти отрезок максимальной длины и вывести его на экран, состоящий из элементов данного массива по правилу:а1 = аn,...
C++ Построить вектор, элементы которого являются наибольшими числами каждой строки данной матрицы http://www.cyberforum.ru/cpp-beginners/thread72123.html
Помогите пожалуйста решить 2 задачи, заранее спасибо: 1) преобразуйте массив так, чтобы все положительные элементы массива стали отрицательными и наоборот, а затем измененный массив отсортируйте по возрастанию. 2) дана квадратная матрица. Постройте вектор ,элементы которого являются наибольшими числами каждой строки матрицы.
C++ Простое наследование классов Вычислите выражение z = x1/2 – y1/2. помогите решить скоро зачет. подробнее

Показать сообщение отдельно
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
09.12.2009, 04:55     Добавление пробелов в строку
Цитата Сообщение от Sayrus89 Посмотреть сообщение
Вот так все запутано
Всё гораздо хуже!

Цитата Сообщение от Vivo Посмотреть сообщение
Дана строка,содержащая последовательность слов,разделенных пробелами. Вводится число которое не меньше длины этой строки и не больше 255. Необходимо привести строку к длине, задаваемой этим числом, путем введения дополнительных пробелов между словами. Если дано одно слово, то вывести сообщение.
Вот ровнялка по ширине консоли, переделайте, чтоб было по заданию
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
#include <stdio.h>
#include <string.h>
 
#define ROW_LEN 80 /* для наглядности. поменяйте на 255 при необходимости. */
 
size_t wordsCount(const char *str){
    const char *p;
    size_t count, inword;
    
    if ( !str || !(*str) )
        return 0;
    
    inword = count = 0;
    for ( p = str; *p; p++ ){
        if ( *p != ' ' ){
            if ( !inword ){
                inword = 1;
                count++;
            }
        }
        else {
            inword = 0;
        }
    }
    return count;
}
 
int main(void){
    char buf[ROW_LEN + 2]; /* "\n\0" */
    char spc[ROW_LEN], espc[ROW_LEN], *pWrd;
    size_t buf_len, nwords, spaces_needed, spaces_between_words, extra_spaces;
    
    while ( 1 ){
        printf("Enter string (single enter - exit): ");
        fgets(buf, ROW_LEN + 2, stdin);
        if ( *buf == '\n' )
            break;
        buf_len = strlen(buf);
        if ( buf[buf_len - 1] == '\n' )
            buf[--buf_len] = '\0';
        
        if ( buf_len == ROW_LEN ){ /* просто вывести строку */
            printf("%s\n", buf);
            continue;
        }
        
        nwords = wordsCount(buf);
        if ( !nwords ){
            printf("Empty string or some other error!\n");
            continue;
        }
        if ( nwords == 1 ){
            printf("Only one word in string!\n");
            continue;
        }
        spaces_needed = ROW_LEN - buf_len + nwords - 1;
        spaces_between_words = spaces_needed / (nwords - 1);
        memset((void*)spc, ' ', spaces_between_words);
        spc[spaces_between_words] = '\0';
        extra_spaces = spaces_needed % (nwords - 1);
        if ( extra_spaces )
            memset((void*)espc, ' ', extra_spaces);
        espc[extra_spaces] = '\0';
        for ( pWrd = strtok(buf, " "); pWrd != NULL; pWrd = strtok(NULL, " ") ){
            if ( --nwords ){
                if ( nwords == 1 && extra_spaces)
                    printf("%s%s%s", pWrd, spc, espc);
                else
                    printf("%s%s", pWrd, spc);
            }
            else
                printf("%s\n", pWrd);
        }
    }
    return 0;
}
Добавлено через 1 час 1 минуту
Вот
так
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
#include <stdio.h>
#include <string.h>
 
#define ROW_LEN 80 /* для наглядности. поменяйте на 255 при необходимости. */
 
size_t wordsCount(const char *str){
    const char *p;
    size_t count, inword;
    
    if ( !str || !(*str) )
        return 0;
    
    inword = count = 0;
    for ( p = str; *p; p++ ){
        if ( *p != ' ' ){
            if ( !inword ){
                inword = 1;
                count++;
            }
        }
        else {
            inword = 0;
        }
    }
    return count;
}
 
int main(void){
    char buf[ROW_LEN + 2]; /* "\n\0" */
    char spc[ROW_LEN], espc[ROW_LEN], *pWrd, *pEspc;
    size_t buf_len, nwords, spaces_needed, spaces_between_words, extra_spaces;
    
    while ( 1 ){
        printf("Enter string (single enter - exit): ");
        fgets(buf, ROW_LEN + 2, stdin);
        if ( *buf == '\n' )
            break;
        buf_len = strlen(buf);
        if ( buf[buf_len - 1] == '\n' )
            buf[--buf_len] = '\0';
        
        if ( buf_len == ROW_LEN ){ /* просто вывести строку */
            printf("%s\n", buf);
            continue;
        }
        
        nwords = wordsCount(buf);
        if ( !nwords ){
            printf("Empty string or some other error!\n");
            continue;
        }
        if ( nwords == 1 ){
            printf("Only one word in string!\n");
            continue;
        }
        spaces_needed = ROW_LEN - buf_len + nwords - 1;
        spaces_between_words = spaces_needed / (nwords - 1);
        memset((void*)spc, ' ', spaces_between_words);
        spc[spaces_between_words] = '\0';
        extra_spaces = spaces_needed % (nwords - 1);
        if ( extra_spaces )
            memset((void*)espc, ' ', extra_spaces);
        espc[extra_spaces] = '\0';
        pEspc = espc;
        for ( pWrd = strtok(buf, " "); pWrd != NULL; pWrd = strtok(NULL, " ") ){
            if ( --nwords ){
                printf("%s%s", pWrd, spc);
                if ( *pEspc ){
                    if ( nwords > 1 )
                        printf("%c", *pEspc++);
                    else 
                        printf("%s", pEspc);
                }
/*
                if ( nwords == 1 && extra_spaces)
                    printf("%s%s%s", pWrd, spc, espc);
                else
                    printf("%s%s", pWrd, spc);
*/
            }
            else
                printf("%s\n", pWrd);
        }
    }
    return 0;
}
чуть красивше...
 
Текущее время: 10:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru