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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272
#1

Маленькая проблемка со switch - C++

07.11.2011, 20:59. Просмотров 1175. Ответов 23
Метки нет (Все метки)

Проблема - невозможность использование перемнной типа string как управляющей в операторе switch.
Цель - сделать некий аналог.
рабочую версию я уже сделал, но она "некрасивая"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string pred;
if (pred == "математика")
                n = 0;
            else
                if (pred == "физика")
                    n = 1;
                else
                    if (pred == "биология")
                        n = 2;
                    else
                        if (pred == "химия")
                            n = 3;
            switch (n)
            {
 
            }
Есть идея сделать что-то типо
#define "математика" 0
глобальную замену слова "математика"
как быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 20:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Маленькая проблемка со switch (C++):

маленькая маленькая консультация, не сложная работа - C++
почему эта прога не компилируется? #include<iostream.h> #include<string.h> #include<math.h> int main() { string z="1011"; ...

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

Маленькая ошибка - C++
#include<iostream> #include <stdio.h> #include <string.h> using namespace std; bool myfunc(char x , char x1 ); bool...

Маленькая задачка. - C++
Дано действительное число h. Выяснить, имеет ли уравнение ax2 + bx + c = 0 действительные корни, если ...

Маленькая буква x - C++
Недавно начал изучать С++. Встретил следующий код, не понимаю как он работает. Если кто подскажет, почему из-за буквы "x" выполняется...

Маленькая конструкции с if else - C++
Доброе время суток, товарищи! У меня возник вопрос, как мне в кострукции с if else сделать так, чтобы else были все другие слова, кроме...

23
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 21:56 #16
вот так точно можно
C++
1
2
3
string str;
cin >> str;
p = data.find(string(str));
Добавлено через 3 минуты
в str напишешь "math" и поидее можно будет вывести "Sidorov"
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272
07.11.2011, 21:56  [ТС] #17
Вы не так понимаете вопрос
меня структура map - не интересует. Мне достаточно того, что если ключ существует, то она добавит в контейнер с именем ключа, а если не существует, то создаст пустой контейнер и имя будет его, как у ключа.
теперь забыли про map

вопрос - нет ли каких-нибудь ограничений на использование какого-нибудь контейнера из map
C++
1
2
3
4
map <string,list<string> > data;
 
        data["maths"].push_back("Sidorov");
        data["physics"].push_back("Ivanov");
в нашем случаи - списка. Могу ли я НАПРЯМУЮ с ним работать. Менять данные, добалять новые и т.д.
например
C++
1
2
list<string> s = data["maths"];
copy(data["biology"].begin(),data["biology"].end(), s.begin(), s.end());
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.11.2011, 21:58 #18
IcyWind, можно) и нужно)

...
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
bool checkValidaty(std::string s) {
 
    std::string subjects[] = {"maths","physics","biology","chemistry"};
    size_t sz = sizeof(subjects)/sizeof(subjects[0]);
 
    if (std::find(subjects,subjects+sz,s)!=subjects+sz)
        return true;
 
    return false;
 
}
 
 
int main() {
 
    std::ifstream ifs("1.txt");
 
    std::map<std::string,std::vector<std::string> > data;
 
    std::string subj, student;
 
    while (ifs) {
 
        ifs >> subj >> student;
 
 
 
        if (checkValidaty(subj)==false) {
 
            std::cout << "Unknown subject: \'" << subj << "\'\n";
 
        }
        else {
 
            data[subj].push_back(student);
 
        }
 
        if (ifs.eof()) break;
 
    }
 
    std::cout << "\n--- List --- \n";
    std::map<std::string,std::vector<std::string> >::iterator it;
 
    for (it=data.begin(); it!=data.end(); it++) {
 
        std::cout << it->first << ": ";
 
        for (int i=0; i<it->second.size(); i++)
            std::cout << it->second[i] << ' ';
 
        std::cout << '\n';
 
    }
 
 
 
 
 
 
 
    getch();
    return 0;
}


0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272
07.11.2011, 22:03  [ТС] #19
Ещё один вопросик - не будет ли он ругаться, если
C++
1
2
setlocale(0, "Rus");
data[НА РУССКОМ].pushback("odin");
0
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 22:04 #20
IcyWind, зависит от проги на которой пишешь.Вообще не должно.
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272
07.11.2011, 22:05  [ТС] #21
вижуал студио 2010
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.11.2011, 22:06 #22
IcyWind, всё что ты написал можно делать.

на счет русского не знаю. поэксперементируй.
хранить полюбому можно. а вот считывать...

с русским всё геморно, поэтому его и не юзают.

и ещё надо добавить, что когда будешь обходить меп через итератор (а другого способа нет), то он хранит в себе объекты типа std::pair у которого 2 поля first (ключ) и second (значение).

вроде бы всё.
0
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 22:07 #23
IcyWind, ну там вроде даже переменные можно русскими буквами называть) в общем попробуй)
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272
07.11.2011, 22:10  [ТС] #24
Цитата Сообщение от OstapBender Посмотреть сообщение
IcyWind, всё что ты написал можно делать.

на счет русского не знаю. поэксперементируй.
хранить полюбому можно. а вот считывать...

с русским всё геморно, поэтому его и не юзают.

и ещё надо добавить, что когда будешь обходить меп через итератор (а другого способа нет), то он хранит в себе объекты типа std:air у которого 2 поля first (ключ) и second (значение).

вроде бы всё.
Спасибо, что открыли для меня map
ну пока обходить его через иттератор не буду....я же знаю, какие там ключи)
а в будущем просто получше изучу этот офигенный контейнер))
0
07.11.2011, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 22:10
Привет! Вот еще темы с ответами:

Проблемка - C++
Доброго всем времени суток. Подскажите,что это за ошибка и что не так? // linaer_system.cpp : Defines the entry point for the console...

Проблемка - C++
#include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; int _tmain(int argc, _TCHAR* argv) { setlocale (LC_ALL,&quot;Russian&quot;);...

Проблемка с g++ - C++
Вот недавно установил винду (раньше была линь), и хотел чтоб всё было привычно, установил g++ компилятор, всё ок, взял написал код самый...

маленькая прожка с ошибкой - C++
компиляция проходит успешно, после запуска выдает ошибку (см вложение) прога открывает файл, посимвольно его читает. если символ есть в...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru