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

Задача на указатели и стек - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
motoo
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 26
10.12.2011, 14:53     Задача на указатели и стек #1
Задали строчную переменную, которая содержит последовательность символов, среди которых есть цифры. Составить программу, которая превращает эту переменную в десятичное число, изымая символы, не являющиеся цифрами. Число формировать, начиная с младшего разряда, используя стек.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
10.12.2011, 15:14     Задача на указатели и стек #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
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
    char* str = "some1234text5yes67no8";
    stack<int> dStack;
    while(*str)
    {
        if(*str >= '0' && *str <= '9')
            dStack.push(*str - '0');
        str++;
    }
    unsigned long long digit = 0;
    int step = 1;
    while(!dStack.empty())
    {
        digit += dStack.top()*step;
        step *= 10;
        dStack.pop();
    }
    
    cout << digit << endl;
    return 0;
}
motoo
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 26
10.12.2011, 15:19  [ТС]     Задача на указатели и стек #3
А можеш немного прокоментировать код??
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
10.12.2011, 15:41     Задача на указатели и стек #4
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
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
    char* str = "some1234text5yes67no8";    //задаем строку
    stack<int> dStack;                      //создаем стек из целых чисел
    while(*str)                             //пока не достигнут конец строки
    {
        if(*str >= '0' && *str <= '9')      //если текущий символ - число
            dStack.push(*str - '0');        //добавляем его в стек
        str++;                              //следующий символ
    }
    unsigned long long digit = 0;           //результат
    int step = 1;                           //коефициент для умножения
    while(!dStack.empty())                  //пока стек не пуст
    {
        digit += dStack.top()*step;         //добавляем до результата значение верхушки стека, умноженное на коефициент 
        step *= 10;                         //следующий розряд
        dStack.pop();                       //удаляем верхушку стека
    }
    
    cout << digit << endl;                  //выводим результат
    return 0;
}
Yandex
Объявления
10.12.2011, 15:41     Задача на указатели и стек
Ответ Создать тему
Опции темы

Текущее время: 23:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru