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

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

Войти
Регистрация
Восстановить пароль
 
Kuziaka
6 / 6 / 2
Регистрация: 22.07.2015
Сообщений: 36
#1

Как создать переменную с именем, заданным в string - C++

22.07.2015, 21:16. Просмотров 954. Ответов 12
Метки нет (Все метки)

Здравствуйте!
Есть один интересный вопрос:
как создать переменную с именем равным строке типа string, то есть имеется строка например
string name="variable1";

и я хочу создать переменную с именем variable1,
но суть в том, что значение строки меняется, а конкретно вводится с консоли(cin<<name; ).
как можно это реализовать и можно ли вообще?
Киньте ссылку, а лучше своими словами и кодом.
Спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2015, 21:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как создать переменную с именем, заданным в string (C++):

Как создать текстовый файл с заданным именем? - C++
Как сделать,чтобы вместо обычного файла он создавал текстовый с именем, введенным с клавиатуры. Подскажите, что дописать. #include...

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Как назвать переменную именем, введенным пользователем? - C++
Недавно начал изучать C++. Скажите пожалуйста, как назвать переменную значением из другой переменной? Вот код простой программы и как...

Как сделать переменную типа char именем файла - C++
Есть переменная(массив) типа char с произвольным количеством символов внитри Как сделать так чтобы когда я создаю файл к примеру таким...

Как назвать переменную зная её String - C++
Например есть у нас массив из трех стрингов. {a b c}. Я такой считываю и хочу что бы первый символ &quot;в данном случае а&quot; обозвал новую...

Как преобразовать переменную string в массив char[]? - C++
Есть переменная string и массив char как записать переменную типа string в такой массив ? String X=&quot;test&quot;; char Mass; ...

12
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
22.07.2015, 21:24 #2
А для чего это?
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
22.07.2015, 21:27 #3
isobo531, Вы, видимо суть вопроса не поняли.
Kuziaka, не уверен, что в С++ на данный момент есть такая возможность. Точно знаю, что в PHP она есть.

Добавлено через 1 минуту
Цитата Сообщение от Kuziaka Посмотреть сообщение
а конкретно вводится с консоли(cin<<name; ).
имена переменных должны быть известны до компиляции.
0
Kuziaka
6 / 6 / 2
Регистрация: 22.07.2015
Сообщений: 36
22.07.2015, 22:03  [ТС] #4
то есть, такое в c++ невозможно?

Добавлено через 13 минут
Цитата Сообщение от isobo531 Посмотреть сообщение
А для чего это?
есть одна задачка:
имеется список имён людей и кол-во баллов, ими набранное.
имена повторяются (баллы суммируются) и с баллами там другие условия...
я и хочу создавать переменные с "именами людей" и в них класть баллы
0
Renji
2003 / 1371 / 309
Регистрация: 05.06.2014
Сообщений: 3,905
23.07.2015, 00:50 #5
Цитата Сообщение от Kuziaka Посмотреть сообщение
как можно это реализовать и можно ли вообще?
C++
1
2
3
std::map<std::string,std::string>variables;
variables["variable1"]="qwer";
cout<<variables["variable1"]<<endl;
0
Kuziaka
6 / 6 / 2
Регистрация: 22.07.2015
Сообщений: 36
23.07.2015, 12:35  [ТС] #6
Цитата Сообщение от Renji Посмотреть сообщение
std::map<std::string,std::string>variables;
это что за чудо?
Пожалуйста объясните.
я правильно понял, что вы индексы массива сделали строчками?

Добавлено через 8 минут
и ещё, если я правильно понял по поводу массива, как его объявлять?
также при компиляции фрагмента ,вами указанного, кроме "не найденного массива"
выдаёт ещё пару ошибок(MinGW code::blocks 13.12)

код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
std::map<std::string,std::string>variables;
variables["variable1"]="qwer";
cout<<variables["variable1"]<<endl;
    return 0;
}
ошибки:
C:\CodeBlocks\experemental\main.cpp||In function 'int main()':|
C:\CodeBlocks\experemental\main.cpp|7|error: 'map' is not a member of 'std'|
C:\CodeBlocks\experemental\main.cpp|7|error: expected primary-expression before ',' token|
C:\CodeBlocks\experemental\main.cpp|7|error: expected primary-expression before '>' token|
C:\CodeBlocks\experemental\main.cpp|7|error: 'variables' was not declared in this scope|
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 12:39 #7
Цитата Сообщение от Kuziaka Посмотреть сообщение
ошибки:
C++
1
2
#include <map>
#include <string>
Цитата Сообщение от Kuziaka Посмотреть сообщение
что вы индексы массива сделали строчками?
ключи ассоциативного массива
1
Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:51 #8
Цитата Сообщение от Kuziaka Посмотреть сообщение
это что за чудо?
http://www.cplusplus.com/reference/map/map/
1
Avazart
23.07.2015, 14:15
  #9

Не по теме:

Цитата Сообщение от Kuziaka Посмотреть сообщение
то есть, такое в c++ невозможно?
На С++ возможно написать свой скриптовый движок поддерживающий это, если надо, но нафига?

0
Kuziaka
6 / 6 / 2
Регистрация: 22.07.2015
Сообщений: 36
23.07.2015, 14:31  [ТС] #10
Спасибо.
буду читать и разбираться
0
Nishen
398 / 237 / 80
Регистрация: 26.02.2015
Сообщений: 1,090
Завершенные тесты: 2
23.07.2015, 14:41 #11
Цитата Сообщение от Kuziaka Посмотреть сообщение
Спасибо.
буду читать и разбираться
Я бы советовал подумать насчет реализации алгоритма... Явно что-то стоит изменить в нем. Для данных целей есть массивы, списки, очереди и т.д.

Добавлено через 2 минуты
Вы, наверное, думаете, что так получится легко читаемый и понимаемый код? Мол, вот переменная "Sidorov", в ней лежит "5" и т.д? А если людей будет 300000? Вы для каждого будете создавать отдельную переменную вручную?

Добавлено через 2 минуты
P.S.S Да и опять же,
Цитата Сообщение от Kuziaka Посмотреть сообщение
имена повторяются
. Вдруг будет два "Sidorov", обоих зовут "Aleksei" и папки у них "Borisovich"?
0
Kuziaka
6 / 6 / 2
Регистрация: 22.07.2015
Сообщений: 36
23.07.2015, 17:43  [ТС] #12
Цитата Сообщение от Nishen Посмотреть сообщение
А если людей будет 300000? Вы для каждого будете создавать отдельную переменную вручную?
я и хочу автоматизировать этот процесс
то есть динамически создавать переменные

алгоритм другой есть, просто интересен был ответ на данный вопрос
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 17:54 #13
Эдакий говнокодец:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <list>
#include <functional>
#include <sstream>
 
 
 
template < typename CommandReturnType , typename ... Args >
class CommandExecuter
{
public:
    using UT_Name = std::string ;
    using UT_Command = std::function < CommandReturnType ( Args... ) > ;
    using UT_CommandReturn = typename UT_Command::result_type ;
    using UT_CommandContainer = std::map< UT_Name , UT_Command > ;
 
 
 
    bool
    add
        (
            const UT_Name & commandName ,
            const UT_Command & command
        )
    {
        auto insertIterator = commandsMap.find ( commandName ) ;
        if ( insertIterator != commandsMap.end() )
        {
            return false ;
        }
        commandsMap.insert (
            insertIterator ,
            std::make_pair (
                commandName ,
                command
            )
        ) ;
        return true ;
    }
 
 
 
 
    UT_CommandReturn
    execute
        (
            const UT_Name & commandName ,
            Args ... args
        )
    {
        auto executeIterator = commandsMap.find ( commandName ) ;
        if ( executeIterator == commandsMap.end() )
        {
            std::stringstream ss ;
            ss << "unknown command \"" << commandName << "\"";
            throw std::runtime_error ( ss.str() ) ;
        }
        return (*executeIterator).second(args...) ;
    }
 
 
 
private:
    UT_CommandContainer commandsMap ;
} ;
 
 
 
template < typename VariableType >
class VariableMap
{
public:
    using UT_Name = std::string ;
    using UT_VarsContainer = std::map < std::string , VariableType > ;
    using UT_Variable = VariableType ;
 
 
    VariableType &
    operator []
        (
            const UT_Name & varName
        )
    {
        return variablesMap [ varName ] ;
    }
 
 
 
private:
    UT_VarsContainer variablesMap ;
};
 
 
 
 
 
 
 
 
 
void set_variable
    (
        VariableMap<std::string> & varMap ,
        const std::string & commandLine
    )
{
    std::stringstream ss ( commandLine ) ;
    std::string variable ;
    std::string value ;
    if ( ss >> variable >> value )
    {
        if ( variable == "" )
        {
            std::cout << "invalid variable name" << std::endl ;
        }
        else
        {
            varMap [ variable ] = value ;
            std::cout << "variable \"" << variable << "\" set to \"" << value << "\"" << std::endl ;
        }
    }
    else
    {
        std::cout << "invalid command arguments" << std::endl ;
    }
}
 
 
 
void show_variable
    (
        VariableMap<std::string> & varMap ,
        const std::string & commandLine
    )
{
    std::stringstream ss ( commandLine ) ;
    std::string variable ;
    if ( ss >> variable )
    {
        if ( variable == "" )
        {
            std::cout << "not set variable name" << std::endl ;
        }
        else
        {
 
        }
        std::cout << variable << " = " << varMap [ variable ] << std::endl ;
    }
}
 
 
 
int main()
{
    VariableMap < std::string > varMap ;
    CommandExecuter< void , decltype(varMap)& , const std::string & > cmd ;
    cmd.add ( "set" , set_variable ) ;
    cmd.add ( "get" , show_variable ) ;
 
    std::string operation ;
    std::string commandLine ;
    std::stringstream ss ;
    while ( std::getline ( std::cin , commandLine ) )
    {
        ss.clear ( ) ;
        ss.str ( commandLine ) ;
        if ( ss >> operation )
        {
            if ( operation == "" )
            {
                continue ;
            }
            else if ( operation == "exit" )
            {
                break ;
            }
            try
            {
                std::getline ( ss , commandLine ) ;
                cmd.execute ( operation , varMap , commandLine ) ;
            }
            catch ( const std::runtime_error & e )
            {
                std::cerr << "Error - " << e.what() << "\n" ;
            }
            catch ( ... )
            {
                std::cerr << "unknown error\n" ;
                throw ;
            }
        }
 
    }
}
http://rextester.com/VJHW73429
0
23.07.2015, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 17:54
Привет! Вот еще темы с ответами:

Как вывести переменную string через cout? - C++
Я думаю из кода все понятно станет #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;ctime&quot; using namespace std; int main() { ...

Как разбить переменную типа String на 2 части? - C++
есть переменная типа String, например String slovo= &quot;кибер форум&quot; как ее разбить на 2 чести ( до пробела и после) так, чтоб String...

Как записать шестнадцатеричное число в переменную типа string? - C++
Есть ф-ция, которая переводит целочисленный переменные или просто цифры в шестнадцатеричный вид. Например этот кусок кода выведет в консоль...

Как записать длину строки типа string в переменную - C++
Собственно вопрос в заголовке. Спасибо заранее:) Через i=s.size() // где, s -&gt; string, i -&gt; int; не работает


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

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

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