【问题标题】:Changing variable name inside a loop在循环内更改变量名
【发布时间】:2016-06-02 16:42:48
【问题描述】:

我正在尝试创建一个循环,该循环将创建一个新变量,但也会自动更改变量的名称,例如增加值。不确定这是否可能,因为您不能拥有动态变量?

if (cin.get() == '\n')
{
    m ++; // Add an integer to m
    string (1 + m); //Trying to name the string the value of m + 1, i.e 3
    cin.ignore():
    getline(cin, (1 + m))
    myfile << (1 + m) << endl;
}

这是我当前的代码,其中充满了错误,但希望其可读性足以理解我正在尝试做的事情。

标题不好,不知道还能叫什么。

【问题讨论】:

  • 你不能改变变量的名字,你可以创建一个新的。
  • 我要做的是创建一个名称正在改变的新变量。
  • @Matt 试图将字符串命名为 m + 1 的值,即 3 变量名不允许使用数字。你能描述一下你为什么要这么做吗?
  • 我认为首先要做的就是打开C++的书开始阅读
  • @tchelidze 尝试这样命名,以便每次运行 if 语句时都会创建一个具有不同名称的新变量。

标签: c++ dynamic


【解决方案1】:

如果你尝试“重命名变量”,你就会误解 C++。

C++ 是一种编译语言,其中变量的名称仅存在于您的源代码中作为处理它们的一种方式,而不存在于编译的程序中。

因此,您也不能在运行时创建具有特定名称的变量——那时变量名称根本不存在。

您可能想要某种将值映射到键的容器,想想字典,您可以在其中说“对于这个整数值12,我存储字符串monkey”左右。看看std::map

现在,你现在真的没有多大意义;并尝试做一些与 C++ 工作方式不同的事情,任何以有序的方式学习 C++ 的人都可以这样做。我真的建议您购买一本 C++ 书籍或教程,然后从它开始。事实证明,它会为您节省很多时间! Here's 推荐的 C++ 书籍和资源列表。

【讨论】:

  • @Marcus_Müller 我要做的是在每次运行 if 语句时创建一个新变量,但每次都使用不同的名称。在示例中,我尝试使用已经存在的 int 变量,同时向其添加值并尝试使用该值作为字符串的名称。
  • @Matt“试图做的是每次运行 if 语句时创建一个新变量..不同的名称”它不能工作。真的。试着理解我的回答。
  • 谢谢你的帮助,我想我还是从头开始吧。
【解决方案2】:

你不能。这在 C++ 中是不可能的。

但是可以在每次迭代中声明和初始化一个变量:

for (int i = 0; i != 10; ++i) {
        int var = i; // Declare 'var' and assign value of 'i' to it.  
}                    // 'var' object goes out of scope and is destroyed

名称从声明它们的点到声明出现的范围结束都是可见的。名称有scope,对象有lifetimes

【讨论】:

  • 但是变量的名字是编译时的东西,甚至在运行时都不存在!
【解决方案3】:

在 C++ 中最接近“重命名”的方法是用新名称声明对“旧命名”变量的引用。

int a = 2;
int &b = a;
//you can now call either `b` or `a` to get the value

无法即时创建新变量。正确的在此处插入任何已编译的语言名称的方法是将值推送到容器(数组、映射、堆栈..等)中。使用地图,您可以执行与您想要的类似的事情,但不同的是,它只是将字符串“映射”到一个值。

#include <map>
#include <string>
#include <sstream> //for int to string conversion

std::string stringify(int val)
{
  std::stringstream ss;
  ss << n;
  return ss.str();
}

int main()
{
  std::map<std::string, int> values;
  for (int i = 0; i < 10; i ++){
    values[stringify(i)] = i*100;
  }
  std::cout << values["1"]; // prints 100
  std::cout << values["9"]; // prints 900
  return 0;
}

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2018-01-12
    • 2013-09-13
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多