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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
#1

Переменная + индекс - C++

16.07.2010, 13:04. Просмотров 2337. Ответов 28
Метки нет (Все метки)

Всем доброго времени суток,

знает кто-нибудь, как получить название переменной, получаемое путем конкатенации строки и индекса i?

т.е.

C++
1
2
3
4
5
6
char str[4] = "var";
 
( i = 0; i<10; i++)
{
  int ...//здесь нужно получить переменную с именем vari (var1 var2 var3 etc)
}
Буду очень рад, если кто-нибудь откликнется :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2010, 13:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменная + индекс (C++):

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз - C++
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Переменная или переменная и условие - C++
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой передается аргумент Status; Как лучше сделать? ...

Индекс - C++
Немного ламерский вопрос, но все же как в данной проге вывести вместо значения числа, его индекс в массиве? :) #include &lt;iostream&gt; ...

Переменная - C++
Мне нужная переменная(ые) в 1 байт. Где её можно взять?

переменная - C++
#include &lt;iostream&gt; using namespace std; void func1(); void func2(); int count; // Это голобальная переменная int main()...

индекс масива - C++
закидайте меня камнями, но почему индексация в масивах с 0, потомучто договарилиси, Страуструп или че еще?

28
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
16.07.2010, 13:13 #2
а зачем ?
0
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
16.07.2010, 13:16 #3
не проще сделать:

C++
1
2
3
4
5
6
int var[10];
 
( i = 0; i<10; i++)
{
var[i] = i;
}
0
el Gato Estelar
9 / 9 / 0
Регистрация: 26.05.2010
Сообщений: 36
16.07.2010, 13:17 #4
Ну в пхп такое проблем не вызывает, а вот в плюсах...Если я не ошибаюсь, то на этапе компиляции, создаётся таблица имён переменных, т.е. ему надо знать как переменные называются ещё до выполнения программы, так что здесь так не получится. А, действительно, зачем? Есть же альтернатива в виде массивов.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
16.07.2010, 18:04 #5
Напрямую C++ такого не поддерживает. Разве что вот так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <string>
 
typedef std::string           T_str;
typedef std::map<T_str, int>  T_str_int;
 
int main()
{   
    T_str_int  i_perem;     
    for(int i = 0; i < 10; ++i)
    {
        i_perem[T_str("var_") += ('0' + i)] = i;
    }       
    std::cout << "var_5 = "              
              << i_perem["var_5"]
              << std::endl;
    return 0;
}
0
Evg
Эксперт CАвтор FAQ
18246 / 6371 / 438
Регистрация: 30.03.2009
Сообщений: 17,628
Записей в блоге: 28
17.07.2010, 10:15 #6
Цитата Сообщение от PMike Посмотреть сообщение
как получить название переменной, получаемое путем конкатенации строки и индекса i
Никак. Такое можно только в интерпретируемых языках, а Си\Си++ - компилируемые
1
Aye Aye
368 / 282 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.07.2010, 08:26 #7
можно класс написать с текстовым полем "имя", и создавать в цикле экземпляры этого класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class var{
string name;
public:
    var(string s):name(s){}
    string getName(){return name;}
};
//.....
char str[4] = "var";
 
for ( i = 0; i<10; i++)
{
    var variable(string(str).push_back('0'+i));
    //если где то понадобится имя обьекта, то:
    if (variable.getName() == "var6") {}
}
1
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
19.07.2010, 09:44  [ТС] #8
Всем спасибо за ответы

Отвечаю на вопрос "зачем" :-)
Есть целый ряд переменных одного типа, например TextLabel и т.п., их много, целый массив mxn.
Проинициализировать их нужно в цикле, вот от сюда и такая задачка.

Добавлено через 1 минуту
а может эту задачку можно как-то решить за счет директив препроцессора?
0
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
19.07.2010, 09:47 #9
Цитата Сообщение от PMike Посмотреть сообщение
а может эту задачку можно как-то решить за счет директив препроцессора?
Нет, не получится.
Цитата Сообщение от PMike Посмотреть сообщение
Есть целый ряд переменных одного типа, например TextLabel и т.п., их много, целый массив mxn.
Проинициализировать их нужно в цикле, вот от сюда и такая задачка.
Загони их в массивы и инициализируй в цикле.
1
el Gato Estelar
9 / 9 / 0
Регистрация: 26.05.2010
Сообщений: 36
19.07.2010, 09:51 #10
Ну вообще, да -- это применение массивов по учебнику
А в принципе можно поизвращаться --
C++
1
2
3
4
5
6
7
#define v0 v[0]
#define v1 v[1]
....
int v[2];
v[0]=1;
printf("\nSomething strange=%d", v0);
..
выведет 1, вот только толку? всё равно, обращаться к переменным, генерируя имя на лету -- не получится, а директивы препроцессора просто задают алиас, синоним, не создавая при этом новую сущность.
0
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
19.07.2010, 10:33  [ТС] #11
массив - вариант.
я его не рассматривал, т.к. он займет слишком много памяти. всем спасибо за ответы :-)
0
el Gato Estelar
9 / 9 / 0
Регистрация: 26.05.2010
Сообщений: 36
19.07.2010, 10:36 #12
а ты думаешь
C++
1
int var1, var2;
займёт места меньше, чем
C++
1
int var[2];
?
0
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
20.07.2010, 08:58  [ТС] #13
:-) Нет конечно :-)

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

C
1
2
3
4
for (i=0;i<1000;i++)
{
  int var1;
}
Думаю, это займет меньше места, чем
C
1
int var[1000];
:-)
0
el Gato Estelar
9 / 9 / 0
Регистрация: 26.05.2010
Сообщений: 36
20.07.2010, 09:48 #14
тогда тебе нужен интерпретирующий язык, на плюсах ты такое не сделаешь
0
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.07.2010, 10:12 #15
Цитата Сообщение от PMike Посмотреть сообщение
я говорю о том, чтобы создавать переменную в цикле
Если ты будешь создавать автоматическую переменную внутри цикла, то по окончанию каждой итерации она будет уничтожатся.
0
20.07.2010, 10:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2010, 10:12
Привет! Вот еще темы с ответами:

индекс массива - C++
Помогите люди!!!!! вывести индекс наименьшего элемента массива.

минимальный индекс - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; int badboys (double* a,int size); void mas_out (double* a,int size); ...

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

Индекс массива - C++
Необходимо составить программу, которая бы меняла местами в строке первую и последнюю, вторую и предпоследнюю и т.д., но почему-то...


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

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

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