2016-07-11 2 views
-2

я не знаю, как включить карту или пару в этом коде ниже, чтобы напечатать оу список в формате A:1 B:2 C:3пар каст или использовать карту, чтобы заполнить и распечатать

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

int main() { 
    // your code goes here 
    char letter = 'A'; 
    typedef pair<char, int> LettreValues; 
    for (int i = 1; i < 27; ++i) 
    {  
     LettreValues[letter]=i; 
     static_cast<char>(letter + 1); 
    } 
    for(auto elem : LettreValues) 
    { 
     std::cout << elem.first << " " << elem.second.first << " " << elem.second.second << "\n"; 
    } 

    return 0; 
} 
+0

Пожалуйста, спускайтесь к специфическим, что бы привлечь лучше и полезные ответы. – Jeet

+0

Я старался быть таким же ясным, как я, не знаю, как я могу получить его лучше, зная, что это мой первый пост. – Tahtoh

+1

Вы не используете карту, вы используете пару. – ChrisD

ответ

0

Вы делаете несколько ошибок.

char letter = 'A'; 

пока все хорошо.

typedef pair<char, int> LettreValues; 

Теперь вы отправились на юг. Вы определили псевдоним типа ('typedef') для std :: pair, который называется «LettreValues».

Но LettreValues ​​- это тип - не экземпляр этого типа.

for (int i = 1; i < 27; ++i) 

С i начинается в 1, то первое значение вставить в вашу карту будет 'A' + 1.

LettreValues[letter]=i; 

Это попытка использовать LettreValues в качестве переменной, которой нет; он пытается использовать его как карту, а это нет - это пара.

static_cast<char>(letter + 1); 

Это добавляет одно к письму, преобразует его в символ и отбрасывает.

Я думаю, что, возможно, вы собирались что-то вроде этого:

// Declare an alias for std::map<char, int>. 
using LettreValues = std::map<char, int>; 
// Now declare a variable of this type 
LettreValues letterValues; 

// the type alias step is completely optional, we 
// could have just written 
// std::map<char, int> letterValues; 

for (int i = 0; i < 26; ++i) { 
    letterValues[letter] = i; 
    letter++; 
} 

for (auto& el : letterValues) { 
    std::cout << el.first << " " << el.second << "\n"; 
} 

Живая демонстрация: http://ideone.com/7ZA5Bk

+0

точно спасибо mate – Tahtoh

+0

Можете ли вы проверить мой код прямо здесь, я попытался получить право, создав несколько функций, чтобы упростить задачу, но я всегда возвращаю неправильный результат. Вот ссылка на проблему http://train.usaco.org/usacoprob2?a=zeWky61KJoG&S=ride И вот мое решение http://ideone.com/a9YHl6 – Tahtoh

+0

Ваше использование карты чрезмерное, вы может просто использовать 'input [i] - 'A' + 1', также вызывающий' returnMap() 'в цикле означает воссоздание карты для каждой буквы. 'sizeof (string)' возвращает размер строкового объекта, а не длину строки (это очень pythoneseque из вас). Чтобы получить длину строки, используйте 'input.length()'. Наконец, значения, которые вы вычисляете, кратные 10. Любое кратное 10 по модулю 10 равно 0. Комментарии в вашем коде указывают, что он должен быть «mod 47», а не «mod 10». http://ideone.com/yBWr8l – kfsone

-1

Попробуйте вставить в пару с помощью зОму: : make_pair, как показано ниже.

char letter = 'A'; 
    typedef pair<char, int> lettervalues; 
    for(int i = 1;i<27;i++) 
    { 
     lettervalues l = std::make_pair<char, int>(letter,i); 
     letter = static_cast<char>(letter + i); 
    } 
+0

Возможно, прочитайте код, который вы опубликовали. – kfsone

Смежные вопросы