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

Массив карт - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 10:47     Массив карт #1
Нужно ввести поток карт, для дальнейшей сортировки. Карта представлена как два символа - (вес) + (масть). Вводится сразу два символа, без пробелов. Дальше идет следующая карта через пробел. Сортировать буду по весу. Так понял, что лучше организовать массив из массива Char [2]. Как это сделать лучше?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 10:47     Массив карт
Посмотрите здесь:

Цикл for и 56 карт C++
Колода карт C++
C++ Как раздать по 5 карт
Колода карт C++
Клас колода карт C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Integrity93
Сообщений: n/a
23.07.2012, 10:53     Массив карт #2
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 10:59  [ТС]     Массив карт #3
Цитата Сообщение от Integrity93 Посмотреть сообщение
На первый взгляд очевидно использование map.
Вот простая статья про этот контейнер.
Только в твоем случае надо создавать map<int, int> как сам понимаешь.
Спасибо, а есть другие варианты? Я даже с vector не знаком толком.
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 11:02     Массив карт #4
Может карту представить как структуру? Потом объявить массив этих структур:
C++
1
2
3
4
5
6
7
8
9
10
struct Karta
{
   char weight;
   char mast;
};
 
int main()
{
   Karta koloda[52];
}
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 11:09  [ТС]     Массив карт #5
Я подумал про структуры, но тогда такой ввод сделать будет невозможно
2С QD ТС
Нужно же будет разделять пробелами элементы структуры.

Добавлено через 4 минуты
Может просто ввести строку, из 23 символов (13 карт и пробелы), и считать их через 2?
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.07.2012, 11:09     Массив карт #6
Цитата Сообщение от Prin53 Посмотреть сообщение
Я подумал про структуры, но тогда такой ввод сделать будет невозможно
Почему невозможно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Karta
{
   char weight;
   char mast;
};
 
Karta koloda[13];
 
for (int i=0; i<13; i++)
{
   cout << "Введите вес карты: ";
   cin.get(koloda[i].weight);
 
   cout << "Введите масть карты: ";
   cin.get(koloda[i].mast);
 
   cin.get();  // считать пробел между картами
}
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 11:56  [ТС]     Массив карт #7
Просто в задании сказано, что на вход идет поток карт.

Добавлено через 44 минуты
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
62
63
64
65
#include <iostream>
#include <string>
using namespace std;
struct Karta
{
   char weight;
   char mast;
};
void Sort(Karta *koloda) 
{ 
    Karta trash; 
    for (int i = 0; i < 13; i++)
        for (int j=0; j < 13-i-1; j++) 
            if (koloda[j].weight > koloda[j+1].weight)
            {
                trash = koloda[j]; 
                koloda[j] = koloda[j+1];
                koloda[j+1] = trash;
            }
}
 
void main()
{ 
    Karta koloda[13];    
    for (int i=0; i<13; i++)
    {
        cout << "WE: ";
        cin>>koloda[i].weight;
 
        cout << "MA: ";
        cin>>koloda[i].mast;
 
    }
 
    for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 1;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
    Sort(koloda);
    for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 1)
            koloda[i].weight = 'A';
        if (koloda[i].weight == 10)
            koloda[i].weight = 'T';
        if (koloda[i].weight == 11)
            koloda[i].weight = 'J';
        if (koloda[i].weight == 12)
            koloda[i].weight = 'Q';
        if (koloda[i].weight == 13)
            koloda[i].weight = 'K';
    }
    for (i = 0; i < 13; i++)
        cout<<koloda[i].weight<<koloda[i].mast<<" ";
 
}
Сделал сортировку. Но она сортирует сначала буквы, а потом цифры. Подскажите, пожалуйста.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
23.07.2012, 16:18     Массив карт #8
Вроде это неправильно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 1;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
У тебя туз идёт перед дамой и королём, а он их старше
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 16:51  [ТС]     Массив карт #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < 13; i++)
    {
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
        if (koloda[i].weight == 'T')
            koloda[i].weight = 10;
        if (koloda[i].weight == 'J')
            koloda[i].weight = 11;
        if (koloda[i].weight == 'Q')
            koloda[i].weight = 12;
        if (koloda[i].weight == 'K')
            koloda[i].weight = 13;
    }
Спасибо. Но все равно, при вводе такой строки
2С QD ТС AD бС 3D TD ЗН 5Н 7Н AS JH КН
Выводит
TC TD JH QD KH AD AC 2C 3D 3H 5H 6C 7H
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
23.07.2012, 17:05     Массив карт #10
Так и должно быть, всё сортирнулось правильно.
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:15  [ТС]     Массив карт #11
Цитата Сообщение от kravam Посмотреть сообщение
Так и должно быть, всё сортирнулось правильно.
По моему, должно быть так
2C 3D 3H 5H 6C 7H TC TD JH QD KH AD AC
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
23.07.2012, 17:22     Массив карт #12
Смотри
C++
1
2
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
'A' у тебя 14, а '2' у тебя не 2, а 50, поэтому у тебя цифры в конце, они больше букв (50> 14)
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:24  [ТС]     Массив карт #13
Цитата Сообщение от kravam Посмотреть сообщение
Смотри
C++
1
2
        if (koloda[i].weight == 'A')
            koloda[i].weight = 14;
'A' у тебя 14, а '2' у тебя не 2, а 50, поэтому у тебя цифры в конце, они больше букв (50> 14)
Понятно. Не подскажешь, что предпринять? Идеи крутятся только о создании дублирующей структуры, уже integer-ов или преобразованием типов.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
23.07.2012, 17:33     Массив карт #14
Да просто всё. Имеем:
2== 50
...
9== 57

++++++++++++++++++++++++++++++++++++++++

А ты сделай так:
T== 58

НУ и остальныфе буквы по возрастанию. Главное не больше 255!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 17:46     Массив карт
Еще ссылки по теме:

Редактор карт на C++, SFML C++
C++ Программа перетасовки карт
C++ Генерация набора карт

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

Или воспользуйтесь поиском по форуму:
Prin53
 Аватар для Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
23.07.2012, 17:46  [ТС]     Массив карт #15
Цитата Сообщение от kravam Посмотреть сообщение
Да просто всё. Имеем:
2== 50
...
9== 57

++++++++++++++++++++++++++++++++++++++++

А ты сделай так:
T== 58

НУ и остальныфе буквы по возрастанию. Главное не больше 255!
Отлично, спасибо. Первая часть сделана.
Yandex
Объявления
23.07.2012, 17:46     Массив карт
Ответ Создать тему
Опции темы

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