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

Ошибка в задаче про банкомат (снова работа со строками) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Метод сортировки "пузырьком" http://www.cyberforum.ru/cpp-beginners/thread949739.html
Написать программу которая реализует метод сортировки "пузырьком". Сгенерировать три массива 100, 1.000 и 10.000 элементов типа integer соответственно. Отсортировать полученные массивы по...
C++ Метод сортировки Шелла Написать программу которая реализует метод сортировки Шелла. Сгенерировать три массива 100, 1.000 и 10.000 элементов типа integer соответственно. Отсортировать полученные массивы по возростанию... http://www.cyberforum.ru/cpp-beginners/thread949738.html
Справка C++ C++
Есть ли хорший русскоязычный справочик C++? Я тут нашол одну электронную версию- вставил ignore нет его вставил :: ну забыл я- нет и его.. С нормальной справкой было бы куда легче и учить разбирая...
C++ Проектирование сервиса
Добрыть день! Сразу оговорюсь: не смог найти подходящую ветку форума, модераторов просьба помочь. О самой задаче: Требуется сделать сервис наподобие ДубльГИСа, только для одного конкретного здания,...
C++ Есть ли короткий путь решения задачи? http://www.cyberforum.ru/cpp-beginners/thread949713.html
Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны. Есть ли ещё более короткий путь решения задачи? #include <cstdlib> #include <iostream> using...
C++ НОД двух чисел алгоритм Евклида Найти найбольший общий делитель двух чисел по алгоритму Евклида. Использовать рекурсию. подробнее

Показать сообщение отдельно
MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24

Ошибка в задаче про банкомат (снова работа со строками) - C++

07.09.2013, 14:46. Просмотров 288. Ответов 0
Метки (Все метки)

Ещё одна задача - на этот раз про банкомат, где надо использовать конструкцию map. Задача состоит в том, что надо вывести ответ на каждую из операций, запрашиваемых у банкомата. Программу я написала (с учётом определённых требований к её оформлению):

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
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<stdlib.h>
using namespace std;
 
int main(){
 
    unsigned long N; map<string, unsigned long> b; //Число операций и "карта" с данными об "именах" владельцев карт и счёте.
 
    cin>>N;
    cin.sync();
    for(unsigned long i=1;i<=N;i++){
            string f,name,ct; char oper; unsigned long pay, pi;
 
            getline(cin,f); //Вводим строку, где через пробел написали "имя" владельца, операция (узнать баланс, пополнить счёт или снять деньги) и количество денег, если надо сделать две последние операции.
            name=f.substr(0,5); //Выясняем "имя".
            oper=f[6]; //Операция.
            if(f.length()>7) {ct=f.substr(8); //Деньги.
            pi=0;
            for(int j=0;j<=ct.length()-1;j++){
                int d;
 
                d=ct[j]-'0';
                pi=pi*10+d;
            } // Перевод строки в число.
            pay=pi;
}
            if(b.find(name)==b.end()){
                b.insert(pair<string, unsigned long>(name,0));
                if(oper=='-') cout<<"FAIL"<<endl;
                else if(oper=='+') {b[name]=pay; cout<<"OK"<<endl;}
                else cout<<"UNKNOWN"<<endl;
            }
            else{
                if(oper=='+') {b[name]=b[name]+pay; cout<<"OK"<<endl;}
                else if(oper=='-') {
                    if(b[name]>=pay){b[name]=b[name]-pay; cout<<"OK"<<endl;}
                    else cout<<"FAIL"<<endl;
                }
                else cout<<b.find(name)->second<<endl;
            }
            f.clear(); name.clear(); ct.clear();
        }
 
    return 0;
}
Она работает у меня во всех случаях, кроме того, когда запрашивается операция "узнать баланс" (то есть '?'), - программа у меня почему-то вылетает, выбрасывая мне окно "string subscript out of range". Проверяла, что у меня записывается в строку f и в переменную oper - вроде всё нормально. Где тут у меня ошибка?

UPD: Извините за беспокойство - ошибку нашла. Можете удалять тему.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru