与字符串对应的访问号码

时间:2014-06-27 16:46:38

标签: c++

我们说我有以下变量:

int number1 = 2;
int number2 = 4;
...
int numbern = 43;

现在我想要的是在for循环数字' i'中访问这些元素,如下所示:

for (int i = 0; i < n; i++)
{
  if(number1 == someFunc("number" + to_string(i)))
  {
    // do stuff
  }
}

这里&#39; someFunc&#39;应确保它识别出我想使用字符串对应的数字。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

使用std :: map你可以这样做:

#include <iostream>
#include <stdlib.h>
#include <map>
#include <string>

using namespace std;

int main (void)
{
map<string,int> mymap;

mymap["number1"] = 2;
mymap["number2"] = 4;
/* ... */

char number[2];
number[1] = '\0';
for(int ii=1; ii<=2; ii++)
{
    number[0] = (char)(ii+48);
    cout << string("number")+string(number) << ": ";
    mymap[string("number")+string(number)] += 1;
    cout << mymap[string("number")+string(number)] << endl;
}

return 0;
}

这是字符串,您可以通过该字符串访问实际数字。在这个例子中,我没有确保密钥实际存在,无论如何应该正常完成。

答案 1 :(得分:1)

我可以想到以下两个选项:

  1. 使用数组。

    int numbers[] = {/* Put the initialization data*/};
    
    ....
    
    if(number1 == someFunc(numbers[i]))
    
  2. 使用地图。如果要更改数组的大小或者预期键不遵循通常的数组索引值,则此选项很有用。

    std::map<int, int> numbers;
    // Add code to initialize the map.
    
    ....
    
    if(number1 == someFunc(numbers[i]))
    

答案 2 :(得分:1)

如果数字不大,那么你可以写

int i = 0;

for ( int x : { number1, number2, /* other numbers */ numbern } )
{
   if ( x == someFunc( "number" + to_string( i ) ) )
   {
      // do stuff
   }

   ++i;
}

否则你应该将数字放在某个容器中。