6 / 6 / 3
Регистрация: 22.07.2015
Сообщений: 36
1

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

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

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

и я хочу создать переменную с именем variable1,
но суть в том, что значение строки меняется, а конкретно вводится с консоли(cin<<name; ).
как можно это реализовать и можно ли вообще?
Киньте ссылку, а лучше своими словами и кодом.
Спасибо большое
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2015, 21:16
Ответы с готовыми решениями:

Как создать новую книгу с заданным именем?
Как создать новую книгу с заданным именем? Например Sub CreateWorkbook() Set NewWorkbook =...

Как создать текстовый файл с заданным именем?
Как сделать,чтобы вместо обычного файла он создавал текстовый с именем, введенным с клавиатуры....

Объявить переменную с именем, заданным в строке
Подскажите пожалуйста, как объявить переменную (например типа int) с именем, заданным в строке? ...

Как создать переменную с именем, взятым из строковой переменной?
Здравствуйте! Пожалуйста подскажите, как в цикле for создать 24 числовых массива с именами,...

12
49 / 48 / 29
Регистрация: 11.11.2014
Сообщений: 332
22.07.2015, 21:24 2
А для чего это?
0
Эксперт PHP
3101 / 2586 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
22.07.2015, 21:27 3
isobo531, Вы, видимо суть вопроса не поняли.
Kuziaka, не уверен, что в С++ на данный момент есть такая возможность. Точно знаю, что в PHP она есть.

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

Добавлено через 13 минут
Цитата Сообщение от isobo531 Посмотреть сообщение
А для чего это?
есть одна задачка:
имеется список имён людей и кол-во баллов, ими набранное.
имена повторяются (баллы суммируются) и с баллами там другие условия...
я и хочу создавать переменные с "именами людей" и в них класть баллы
0
2756 / 1910 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
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
6 / 6 / 3
Регистрация: 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
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
23.07.2015, 12:39 7
Цитата Сообщение от Kuziaka Посмотреть сообщение
ошибки:
C++
1
2
#include <map>
#include <string>
Цитата Сообщение от Kuziaka Посмотреть сообщение
что вы индексы массива сделали строчками?
ключи ассоциативного массива
1
58 / 45 / 11
Регистрация: 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
6 / 6 / 3
Регистрация: 22.07.2015
Сообщений: 36
23.07.2015, 14:31  [ТС] 10
Спасибо.
буду читать и разбираться
0
1172 / 833 / 359
Регистрация: 26.02.2015
Сообщений: 3,743
23.07.2015, 14:41 11
Цитата Сообщение от Kuziaka Посмотреть сообщение
Спасибо.
буду читать и разбираться
Я бы советовал подумать насчет реализации алгоритма... Явно что-то стоит изменить в нем. Для данных целей есть массивы, списки, очереди и т.д.

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

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

алгоритм другой есть, просто интересен был ответ на данный вопрос
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2015, 17:54
Помогаю со студенческими работами здесь

Как создать переменную используя текст из string?
В php можно так, а в c# не знаю $name = 'number'; $$name = 123;

Создать переменную с именем ключа массива
Добрый день всем, возникла такая задача, я получаю неопределенный массив данных, не понимаю как...

Создать папку с заданным именем во всех папках выбранного каталога
Подскажите пожалуйста как реализовать следующее В каждой папке создать новую папку с заданным...

Создать переменную с именем числового значения другой переменной
Здравствуйте. Вроде задача простая, но не получается. Есть переменные в рабочей области Матлаб. ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru