如何在不重复的情况下随机播放字符"abcdefghijklmnopqrstuvwxyz"
how to shuffle char "abcdefghijklmnopqrstuvwxyz" without repeating
const char chars[] = "abcdef ....";
char result[...];
memcpy(result, chars, sizeof(chars));
for (unsigned i = 0; i < (sizeof(chars)-1); ++i) {
unsigned j = rand() % sizeof(chars);
char tmp = result[j];
result[j] = result[i];
result[i] = tmp;
}
将结果写入文本文件时出现问题。
C++中"如何洗牌"的答案是使用标准库的洗牌算法之一。一个简单的方法是把它放在一个std::string中,并使用std::random_shuffle:
std::string s = "abcdef ...." ;
std::random_shuffle(s.begin(), s.end());
您也可以使用数组来执行此操作:
char letters[] = {'a', 'b', ..... };
std::random_shuffle(letters, letters+26);
你来了:费舍尔-耶茨洗牌。
以及C++
实施。
您的问题是字符值 0 未映射到 A。 相反,将打印为 A 的字符等于 65。如果需要,您可以在此处查看完整表格。
无论如何,代码解决方案很简单。而不是
cout<<letter[i]<<" ";
你可以做:
cout<<letter[i]+'A'-1<<" ";
(-1 是因为您将字母从 1 到 26 而不是 o 0 到 25 编号(。
const char chars[] = "abcdef ....";
char result[...];
memcpy(result, chars, sizeof(chars));
for (unsigned i = 0; i < (sizeof(chars)-1); ++i) {
unsigned j = rand() % sizeof(chars);
char tmp = result[j];
result[j] = result[i];
result[i] = tmp;
}
如果您使用 STL,则首选 std::random_shuffle。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 按列随机播放 2D 矢量
- C++.加权标准::随机播放
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 是否可以使用带有random_shuffle的矢量随机播放音频文件
- 范围 - v3 中的随机播放操作
- 在C++中按行随机播放 2D 数组
- 读取文本文件并随机播放
- 当Windows XP(32位,SP3)播放声音时,随机应用程序暂停半秒钟
- C++中的随机播放向量
- C++ 中的随机播放
- C++ 数组随机播放不起作用
- 如何在不重复的情况下随机播放字符"abcdefghijklmnopqrstuvwxyz"
- 随机播放和random_shuffle c++ 有什么区别
- 随机播放函数无法使用指针
- 将多维数组随机化(随机播放)为另一个 2D 数组
- C++反向加权无序播放/随机
- 如何使用vlc或其他东西播放mp4文件的随机部分