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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mr_David
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 4
#1

Вставить тире между последовательностью чисел - C++

03.04.2014, 01:41. Просмотров 221. Ответов 2
Метки нет (Все метки)

Написал программу которая вставляет тире между последовательностью чисел, все вроде бы хорошо, работает, но нашел баг, ввожу числа типа 12456788, а получаю:
1-2,4-8,8 .В чем проблема? Почему 8 повторяется два раза, где тире и как отдельная цифра? Помогите пожалуйста, заранее спасибо!!!))
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string a;
    string b;
    char begin, end;
    bool start = false;
    
    cin >> a;
    
    
    for (int i = 1; i <= a.size(); i++)
    {
        if (a[i] == (a[i - 1] + 1) && start == false) // если текущий символ меньше предыдущего и постеловательность не начата
        {
            begin = a[i - 1]; // запоминаем первый символ
            start = true; // признак последовательности - true
            continue;
        }
        
        // если конец последовательности
        if ( (a[i] != a[i - 1] + 1  || i == a.size() - 1) && start == true )
        {
            // формируем выходную строку
            if (b.size() != 0)
                b += ',';
            if (i == a.size() - 1)
            {
                end = a[i];
            }
            else
            {
                end = a[i - 1];
            }
            
            start = false;
            b += begin;
            b += '-';
            b += end;
            //i++;
            continue;
            
        }
        
        if ((start == false) && (i != a.size() + 1))
        {
            if (b.size() != 0)
                b += ',';
            b += a[i - 1];
            continue;
        }
        
    }
    
    cout << b << endl;
    getchar();
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 01:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставить тире между последовательностью чисел (C++):

Найти пару чисел и вставить между ними цифру - C++
float a,b; cout&lt;&lt;&quot;Enter a&quot;&lt;&lt;endl; cin&gt;&gt;a; cout&lt;&lt;&quot;Enter b&quot;&lt;&lt;endl; cin&gt;&gt;b; it=el.begin(); while(it!=el.end()) ...

Дана последовательность целых чисел а1, а2, …, an. Выяснить, является ли она симметричной последовательностью простых чисел - C++
Ребят срочно надо&gt;&lt;

Ввести массив целых чисел. Вставить число 0 между элементами, имеющими разный знак - C++
Помогите пожалуйста. Программа должна быть несложной) Ввести массив целых чисел, не равных 0, длиной n (n&lt;30). Вставить число 0 между...

В одномерном массиве из целых чисел вставить новый элемент между всеми парами элементов, имеющими разные знаки - C++
одномерном массиве из целых чисел вставить новый элемент между всеми парами элементов,имеющими разные знаки

Работа с последовательностью целых чисел - C++
Вводится последовательность целых чисел (0 – конец последовательности), найти разность между наименьшим среди положительных и наибольшим...

Строки (между одинаковыми буквами вставлять " - " (тире)) - C++
Здавствуйте,помогите с программой,выдает ошибку на scanf (&quot;%s&quot; &amp;a); Сама ошибка: invalid operands of types 'const char ' and 'char ' to...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
03.04.2014, 02:12 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Доброй ночи, а как должно быть на самом деле, если у вас в конце строки две цифры 8?

Добавлено через 20 минут
Это из-за условия в цикле for. В частности, когда цикл доходит до последнего символа a[7], условие выхода i < a.size() не выполняется, т.к. в строке у вас получается 8 символов.
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
03.04.2014, 03:19 #3
и вообще ведь массив начинается с нулевого элемента, к примеру если создан массив a[8], то цикл же будет for (int i = 0; i < 8; i++){...}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 03:19
Привет! Вот еще темы с ответами:

Для заданного значения n сформировать массив X(n), являющийся последовательностью чисел Фибоначчи - C++
Для заданного значения n сформировать массив X(n) , являющийся последовательностью чисел Фибоначчи. Определить, насколько...

Вставить между одинаковыми символами вставить " * " (звёздочку) (есть наброски) - C++
Доброго времени суток, у меня есть задание (Вставить между одинаковыми символами вставить &quot; * &quot; (звёздочку)). Программирую в MVS2012,...

В массиве целых чисел найти и удалить группу максимальной длины, являющуюся монотонной последовательностью - C++
Задание : В массиве целых чисел найти и удалить группу максимальной длины, элементы которой представляют собой монотонно возрастающую...

В строке между словами вставить символ / - C++
В строке между словами вставить символ /. Выполнить через команды на DOS 3.1 Добавлено через 1 час 50 минут пожалуйста. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru