2015-09-27 2 views
-2

Просто, эта программа требует, чтобы пользователь вводил последовательность непустого числа, например. 44477610223332145 не более 17 цифр и выведите их в алфавитное предложение. Переводы таковы: 2 is 'A', 22 is 'B', 222 is 'C', 3 is 'D' и т. Д. Осталось, что 0 представляет собой пробел и 1 - пауза, например 441444 для разделения 44 и 444. Теперь мой код встречает ошибку во время выполнения, так как я действительно новичок в C++. Я не знаю, что здесь происходит. Пожалуйста, помогите проверить. Благодаря!C++ перевести номер клавиатуры телефона в алфавит

Благодарим вас за комментарии, указав, что я не включил сообщение об ошибке, в нем говорится, что «векторный индекс выходит за пределы диапазона».

#include <iostream> 
#include<map> 
#include<string> 
#include<vector> 
using namespace std; 

int main() 
{ 
    string n; 
    vector<string> o; 
    int i, x(0); 
    map<string, char>character; 

    { 
     character["2"] = 'A'; 
     character["22"] = 'B'; 
     character["222"] = 'C'; 
     character["3"] = 'D'; 
     character["33"] = 'E'; 
     character["333"] = 'F'; 
     character["4"] = 'G'; 
     character["44"] = 'H'; 
     character["444"] = 'I'; 
     character["5"] = 'J'; 
     character["55"] = 'K'; 
     character["555"] = 'L'; 
     character["6"] = 'M'; 
     character["66"] = 'N'; 
     character["666"] = 'O'; 
     character["7"] = 'P'; 
     character["77"] = 'Q'; 
     character["777"] = 'R'; 
     character["7777"] = 'S'; 
     character["8"] = 'T'; 
     character["88"] = 'U'; 
     character["888"] = 'V'; 
     character["9"] = 'W'; 
     character["99"] = 'X'; 
     character["999"] = 'Y'; 
     character["9999"] = 'Z'; 
     character["0"] = ' '; 
    } 

    cout << "Please enter the message: "; 
    cin >> n; 

    for(i = 0; i < 17; i++) 
    { 
     if(n.at(i) == n.at(i + 1)) 
      o[x] = n.at(i) + n.at(i + 1); 
     else 
      x++; 

     o[x] = n.at(i); 
    } 

    for(x = 0; x < o.size(); x++) 
     cout << "Output message: " << character[o[x]] << endl; 

    cout << "Count: " << o.size() << endl; 
    return 0; 
} 
+1

Просто, чтобы проверить правильность алгоритма: какой должен быть выход из «25554440222222»? – Piters

+0

Каково точное сообщение об ошибке? –

ответ

0

Вы не можете сделать if(n.at(i) == n.at(i + 1)) для 17-го элемента, потому что нет ни одного элемента после этого и n.at(17) выбросит std::out_of_range.

Попробуйте это с помощью short-circuit-evaluation:

if(i < 16 && n.at(i) == n.at(i + 1)) 

n.at(i) == n.at(i + 1) и не будет оцениваться для i == 16.

Кроме того,

программа требует пользователя ввести последовательность непустого числа, например, 44477610223332145 в большинстве 17 цифр

но ваша петля сделана итерировать в 17 раз, даже если n короче.

+0

Спасибо! но все еще не может работать. Он говорит, что «векторный индекс вне диапазона» – jekaterina

+0

Ваш вектор пуст, и вы пытаетесь получить доступ к 'o [x]'. Вы должны использовать 'push_back'. – LogicStuff

+0

Теперь он говорит «Стандартные библиотеки C++ вне диапазона» && 0 – jekaterina