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

Равномерное дополнение строки пробелами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатели на функции (Прата) - не пойму, как это работает http://www.cyberforum.ru/cpp-beginners/thread1228221.html
Стивен Прата "Язык программирования C++. Лекции и упражнения" 7 глава, стр. 355, листинг 7.18. fun_ptr.cpp // fun_ptr.cpp -- pointers to functions #include <iostream> double betsy(int);...
C++ Как ограничить поле ввода только одним символом? А двумя? Как ограничить поле ввода только одним символом? А двумя? Например чтобы сразу после нажатия клавиши(двух), программа переходила к следующей операции, не ожидая нажатия "ентер", либо же не давала... http://www.cyberforum.ru/cpp-beginners/thread1228219.html
C++ Невозможно запустить программу. Отсутствует libiconv-2.dll
Запуск программы невозможен так как на компьютере отсутствует libiconv-2.dll.попробуйте переустановить программу Добавлено через 36 секунд Что нужно сделать?
C++ Неверная обработка данных при вводе двух и более величин
У меня по коду все правильно, при вводе одного значения n вывод верный. Если ввод включает 2 и больше значений n, то первое значение, остальные такое чувство, что не проверяет программа. Вот код:...
C++ Зависание потоков. Работа с файлами http://www.cyberforum.ru/cpp-beginners/thread1228168.html
Всем еще раз привет. Очень прошу помощи. Пишу на С++ под винду, с учетом специфики проекта выбор остановился на boost library. Пишу многопоточное приложение следующего вида: создается...
C++ Анализатор входящих сообщений сторонних ПО и сервисов В WinAPI не силен, однако необходимо написать программу на С++, анализирующую входящие сообщения какого-нибудь сервиса обмена сообщениями, например вконтакте. По самому анализатору наброски есть,... подробнее

Показать сообщение отдельно
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 523
19.07.2014, 13:52  [ТС]
Цитата Сообщение от QGuest Посмотреть сообщение
Надо оценить требуемую сложность задачи. Просто заполнить строку пробелами слишком просто.
Глядя на данное условие в голову приходит пословица:каков вопрос-таков ответ.
Условие поставлено некорректно,нет точной формулировки задачи.В частности перенос длинной строки.Сказано в условии дополнить-дополняю равномерно пробелами.Строка длиннее заданной длины-просто вывожу дальше.

Такой вот еще вопрос:почему в коде
C++
1
2
3
    printf("Enter string: ");
     while (getch()!=27)
      gets(s[k++]);
программа ожидает ЕЩЕ 1 нажатие клавиши?
Допустим запустил программу.Хочу ввести некоторый текст.Начинаю вводить
Привет
Мир
!
Но перед началом ввода слова после запуска,и после нажатия на энтер необходимо нажать еще раз любую клавишу?То есть получается перед вводом первого слова я должен нажать 2 раза букву "П",чтобы получить первую букву "П".Для ввода текста из примера выше надо набирать так:
ППривет_тут энтер
ММир_тут энтер
!!_тут энтер и esc
Почему программа ждет 2 нажатия перед вводом и после нажатия энтера?
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
 
// âîçâðГ*Г№Г*ГҐГІ ïîñëåäГ*ГЁГ© ïðîáåë Гў ñòðîêå str, Г*Г*Г·ГЁГ*Г*Гї Г± ïîçèöèè start, åñëè ïðîáåëîâ áîëüøå Г*ГҐГІ ГІГ® -1
int get_last_space( char *str, int start )
{
    for ( int i = start; str[i]; ++i )
        if ( str[i] == ' ' )
            if ( str[i + 1] != ' ' )
                return i + 1;
            
    return -1;
}
 
// ГўГ±ГІГ*âëÿåò ïðîáåë Гў ñòðîêó str, Гў ïîçèöèþ pos
void insert_space( char *str, int pos )
{
    int len = strlen(str);
    
    str[len + 1] = '\0'; // ïðèçГ*Г*ГЄ ГЄГ®Г*Г¶Г* ñòðîêè
    for ( int i = len; i > pos; --i )
        str[i] = str[i - 1];        
    str[pos] = ' ';
}
 
// äîïîëГ*ГїГҐГІ ñòîêó ïðîáåëГ*ìè
void format_string(char *str, unsigned int len )
{
    int pos = 0;
    
    if ( get_last_space(str, 0) == -1 ) // åñëè ïðîáåëîâ Г*ГҐГІ, Г*ГЁГ·ГҐГЈГ® Г*ГҐ äåëГ*ГҐГ¬
        return;
 
    while ( strlen(str) < len ) // ïîêГ* äëèГ*Г* ñòðîêè Г*ГҐ äîñòèãГ*ГҐГІ Г*ГіГ¦Г*îãî Г°Г*çìåðГ*
    {
        pos = get_last_space(str, pos); // ïîëó÷Г*ГҐГ¬ ïðîáåë Г± ïîçèöèè pos
        
        if ( pos != -1 ) // ïîêГ* Г*ГҐ äîñòèãГ*ГіГІ ГЄГ®Г*ГҐГ¶ ñòðîêè, ГўГ±ГІГ*âëÿåì ïðîáåëû
        {
            insert_space(str, pos); 
            pos += 1;
        }
        else // ГЁГ*Г*Г·ГҐ Г*Г*Г·Г*Г*ГҐГ¬ Г± Г*Г*Г·Г*Г«Г* ñòðîêè
            pos = 0;
    }
}
 
int main( )
{
    int i=0;
    int k=0;
    int n = 50;  // áóäåì äîïîëГ*ГїГІГј ïðîáåëèìè äî äëèГ*Г» n
    char s[999][255];
 
    printf("Enter string: "); // ââîä ñòðîêè
     while (getch()!=27)
      gets(s[k++]);
        
    for ( i = 0; i < n; ++i )
        printf("-");
        printf("\n");
        
for ( i = 0; i < k; ++i ){
    format_string(s[i], n); // ôîðìГ*òèðîâГ*Г*ГЁГҐ
    
    printf("%s\n", s[i]); // âûâîä ñòðîêè
}
    
    for ( i = 0; i < n; ++i )
        printf("-");
    
    getch();
    
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru