将int*强制转换为字符串,然后将字符串强制转换为int*
Cast int* to string and then string to int*
在我的游戏中,我有一些人的名字是随机的,这些名字存储在字符串**中
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;
我尝试了不同的演员阵容,但都不起作用。。。
有可能做我想做的事情吗?或者我必须为我的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}};
}
此代码未经测试,您可能需要将类型名添加到Initializations中。
如果你有更多的男孩或女孩,只需将他们的名字添加到列表中即可。std::vector
将负责大小和内存管理。有了它,你应该能够做这样的事情:
_name = names_tab[_sex][rand() % names_tab[_sex].size()];
尽管我认为,您应该看看更灵活的C++随机库,而不是旧的C函数rand()
。
std::string既没有运算符*,也没有到char*的自动转换。必须使用对const char*的显式转换,称为c_str():
_name = names_tab[_sex][rand() % *(names_tab[2][_sex].c_str()];
尽管这仍然是黑客行为,但您的结构解决方案是一种更合适的方式。更恰当的做法是使用std::vector而不是数组。
您可以将名称列表存储在字符串向量中,拼写为std::vector<std::string>
,然后生成一个0到7之间的随机数,并将其用作向量的索引以显示随机名称。。。
#include <iostream>
#include <ctime>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> m_vec = {"Fernande", "Gertrude", "Aicha", "Pamella", "Carla", "Simone", "Svetlana", "Carmene"};
vector<string> f_vec = {"Ludo", "Luc", "Bruno", "Olivier", "Fabrice", "Hadrien", "Hazizoul", "DK"};
srand(time(0)); // ensure truly randomized number
int x = rand() % 8; // find random number between 0 and 7
cout << "Random boy's name: " << m_vec[x] << endl;
x = rand() % 8;
cout << "Random girl's name: " << f_vec[x] << endl;
return 0;
}
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数