c++ - 将 int* 转换为字符串,然后将字符串转换为 int*

标签 c++ casting

在我的游戏中我有随机名字的人,名字存储在一个字符串中**

string          **name_tabs()
{
  string        **names_tab;
  int           *max_0; *max_0 = 8; //girls number
  int           *max_1; *max_1 = 8; //boys number

  names_tab = new string*[3];

  names_tab[0] = new string[8]; //index 0 for girls_names_tab
  names_tab[1] = new string[8]; //index 1 for boys_names_tab
  names_tab[2] = new string[2];
  //index 2 for max_index when parsing either boys or girls tab

  names_tab[0][0] = "Fernande";
  names_tab[0][1] = "Gertrude";
  names_tab[0][2] = "Aicha";
  names_tab[0][3] = "Pamella";
  names_tab[0][4] = "Carla";
  names_tab[0][5] = "Simone";
  names_tab[0][6] = "Svetlana";
  names_tab[0][7] = "Carmene";

  names_tab[1][0] = "Ludo";
  names_tab[1][1] = "Luc";
  names_tab[1][2] = "Bruno";
  names_tab[1][3] = "Olivier";
  names_tab[1][4] = "Fabrice";
  names_tab[1][5] = "Hadrien";
  names_tab[1][6] = "Hazizoul";
  names_tab[1][7] = "DK";

  names_tab[2][0] = reinterpret_cast<char*>(max_0);
  //this cast is just a try that seemed to work
  names_tab[2][1] = reinterpret_cast<char*>(max_1);
  //idem

  return (names_tab);
}

当我第一次制作这个标签时,它只是一个字符串*[2],但我不想以后遇到麻烦,如果我的男孩多于女孩,反之亦然,当我试图访问我的名字时,所以我想做这样的事情:

_name = names_tab[_sex][rand() % *(names_tab[2][_sex])];
// with _name and _sex members of same class Chose

但它不编译......

class/laChose.cpp:51:39: erreur: no match for ‘operator*’ (operand type is ‘std::string {aka std::basic_string<char>}’)
     new_name = names_tab[_sex][rand() % *(names_tab[2][_sex])] + new_name;

我尝试了不同的 Actor 阵容,但没有一个奏效......

是否可以做我正在尝试做的事情,或者我是否必须为我的 names_tab 创建一个结构?

struct names_tab
{
  string         *names_tab[2];
  int            index_max[2];
};

此外,如果可能的话,我有没有办法做到这一点(使用强制转换):

names_tab[2][0] = 8;

_name = names_tab[_sex][rand() % names_tab[2][_sex]];

期待您的回答!

[编辑]:

感谢您的帮助!这是我选择的解决方案:

[解决方案]:

vector<string>          *name_tabs()
{
  vector<string>        *names_tab;

  names_tab = new vector<string>[2];

  names_tab[0].push_back("Fernande");
  names_tab[0].push_back("Gertrude");
  names_tab[0].push_back("Aicha");
  names_tab[0].push_back("Pamella");
  names_tab[0].push_back("Carla");
  names_tab[0].push_back("Simone");
  names_tab[0].push_back("Svetlana");
  names_tab[0].push_back("Carmene");

  names_tab[1].push_back("Ludo");
  names_tab[1].push_back("Luc");
  names_tab[1].push_back("Bruno");
  names_tab[1].push_back("Olivier");
  names_tab[1].push_back("Fabrice");
  names_tab[1].push_back("Hadrien");
  names_tab[1].push_back("Hazizoul");
  names_tab[1].push_back("DK");

  return (names_tab);
}



_name = names_tab[_sex][rand() % names_tab[_sex].size()]

最佳答案

尤其是在学习的时候,应该更喜欢std::vector , 或 std::array<>在 C 数组上:

constexpr std::array<std::vector<std::string>, 2> name_tabs() {
  return {{"Fernande"s, "Gertrude"s, "Aicha"s,
           "Pamella"s,  "Carla"s,    "Simone"s,
           "Svetlana"s, "Carmene"s},
          {"Ludo"s,     "Luc"s,      "Bruno"s,
           "Olivier"s,  "Fabrice"s,  "Hadrien"s,
           "Hazizoul"s, "DK"s}};
}

此代码未经测试,您可能需要将类型名称添加到初始化。

如果您有更多男孩或更多女孩,只需将他们的名字添加到列表中即可。 std::vector将负责大小和内存管理。有了它,你应该能够做这样的事情:

_name = names_tab[_sex][rand() % names_tab[_sex].size()];

虽然我认为,您应该看看更灵活的 C++ random library , 而不是旧的 C 函数 rand() .

关于c++ - 将 int* 转换为字符串,然后将字符串转换为 int*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33410993/

相关文章:

c++ - 如何初始化 const/non-const 静态引用成员?

C++:push_back(new Object()) 是内存泄漏吗?

C++ 将大量 vector 加倍转换为字符 vector 的最有效方法

collections - VB6:在集合中存储和检索表单

c++ - 将 (void*) 转换为 std::vector<unsigned char>

ios - 将值转换为从 Error 继承的枚举

c++ - 在没有 double 类型的 C 编译器上解析 double IEEE 浮点

c++ - 避免 C++ 中的非规范值

c++ - 存储双指针地址并检索其值

c++ - 如何在C++中读取二进制图像(tif)?