与字符串对应的访问号

Access number that corresponds to string

本文关键字:访问 字符串      更新时间:2023-10-16

假设我有以下变量:

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

现在我想要的是在数字' I '的for循环中访问这些元素,就像下面这样:

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

这里'someFunc'应该确保它识别出我想要使用字符串对应的数字。我怎么能这么做?

对于使用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] = '';
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;
}

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

如果数字的数量不是很大,那么你可以写

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

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

  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]))