我创建了一个程序,使用文件输入/输出随机地将角色(作业)分配给某个房子的成员。它构建成功,但是当使用cout并且我实际看到结果时,我可以看到为什么程序是不工作。
以下是我认为有问题的代码片段:
std::string foo = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences";
cout << foo << endl;
这里是成员[random]数组,它从这个数组中随机选择成员并查看它们的可用时间并根据它们的Preference输入文件为它们分配作业。
unsigned const char members[22] =
{ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v' };
我创建了一个随机数字选择器,它经历了0-21并将它创建的值分配给变量random。因此,从本质上讲,它是成员[随机]并且完全随机。
这是我在终端中输出的输出。
Preferences/116-Preferences
但是我将输出设置为Preferences / member [random] -Preferences。 它正在访问一个数字,而不是我的数组字符。
我创建了一个cout&lt;&lt;成员[随机];在它下面,每次我运行程序,我得到
Preferences/107-Preferences <---- A random number every time
k <---- random letter every time.
所以我知道它必须访问我的随机函数,但是将它分配给数字!我如何解决这个问题,以便正确输出:
Preferences/t-Preferences
请帮助我,谢谢!
答案 0 :(得分:3)
&#34;你越是疏忽管道,就越容易停下来 排水&#34; - Scotty,Star Trek III
声明members
为unsigned char
s并没有完成任何有用的事情。一个简单的char
就足够了。 std::string
已经实现了一个带有+
参数的重载char
运算符,因此它比您想象的要容易得多:
const char members[22] = {
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v' };
// ...
std::string foo = std::string("Preferences/") + members[random]
+ "-Preferences";
答案 1 :(得分:1)
没有::std::to_string(char)
,只有(不太接近)::std::to_string(int)
。所以你的角色实际上被转换为它的数字表示,你会得到你不想要的结果。
尝试改为
std::string foo("Preferences/");
foo = foo.append(1, members[random]).append("-Preferences");
使用字符串流的变体:
ostringstream oss;
oss << "Preferences/" << members[random] << "-Preferences";
// get your string via:
oss.str();