Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Kuziaka
6 / 6 / 3
Регистрация: 22.07.2015
Сообщений: 36
#1

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

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

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

и я хочу создать переменную с именем variable1,
но суть в том, что значение строки меняется, а конкретно вводится с консоли(cin<<name; ).
как можно это реализовать и можно ли вообще?
Киньте ссылку, а лучше своими словами и кодом.
Спасибо большое

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2015, 21:16
Ответы с готовыми решениями:

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

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

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

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

Как назвать переменную зная её String
Например есть у нас массив из трех стрингов. {a b c}. Я такой считываю и хочу...

12
isobo531
43 / 43 / 28
Регистрация: 11.11.2014
Сообщений: 325
22.07.2015, 21:24 #2
А для чего это?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
22.07.2015, 21:27 #3
isobo531, Вы, видимо суть вопроса не поняли.
Kuziaka, не уверен, что в С++ на данный момент есть такая возможность. Точно знаю, что в PHP она есть.

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

Добавлено через 13 минут
Цитата Сообщение от isobo531 Посмотреть сообщение
А для чего это?
есть одна задачка:
имеется список имён людей и кол-во баллов, ими набранное.
имена повторяются (баллы суммируются) и с баллами там другие условия...
я и хочу создавать переменные с "именами людей" и в них класть баллы
0
Renji
2156 / 1515 / 461
Регистрация: 05.06.2014
Сообщений: 4,394
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 / 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
Croessmah
++Ͻ
14365 / 8147 / 1533
Регистрация: 27.09.2012
Сообщений: 20,082
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 12:39 #7
Цитата Сообщение от Kuziaka Посмотреть сообщение
ошибки:
C++
1
2
#include <map>
#include <string>
Цитата Сообщение от Kuziaka Посмотреть сообщение
что вы индексы массива сделали строчками?
ключи ассоциативного массива
1
Pancir
57 / 44 / 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
Kuziaka
6 / 6 / 3
Регистрация: 22.07.2015
Сообщений: 36
23.07.2015, 14:31  [ТС] #10
Спасибо.
буду читать и разбираться
0
Nishen
457 / 280 / 154
Регистрация: 26.02.2015
Сообщений: 1,327
Завершенные тесты: 2
23.07.2015, 14:41 #11
Цитата Сообщение от Kuziaka Посмотреть сообщение
Спасибо.
буду читать и разбираться
Я бы советовал подумать насчет реализации алгоритма... Явно что-то стоит изменить в нем. Для данных целей есть массивы, списки, очереди и т.д.

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

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

алгоритм другой есть, просто интересен был ответ на данный вопрос
0
Croessmah
++Ͻ
14365 / 8147 / 1533
Регистрация: 27.09.2012
Сообщений: 20,082
Записей в блоге: 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?
Я думаю из кода все понятно станет #include &quot;stdafx.h&quot; #include &quot;iostream&quot;...

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

Как преобразовать переменную string в массив char[]?
Есть переменная string и массив char как записать переменную типа string в...


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

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

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