如何在c ++中选择随机字母

时间:2013-11-21 21:48:04

标签: c++ arrays random ctime

嗨,我正在为我的c ++课程中的最后一个刽子手项目工作。我已经完成了大部分工作,但我想做到这一点,所以玩家可以选择在单人模式下对抗电脑对手。我尝试做类似97 + rand()%123之类的东西,然后将数字转换为字符,但我一直在变得怪异的字符,比如颠倒了我检查一下,看看我是否遗漏了一些东西,但我有正确的指令,我加入了一个srand 。 我所做的简化版本看起来像这样

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;

int main(){
    char cch;
    char ch; 
    unsigned seed= time(0)
    srand(seed)
    cch=97rand()%123;
    ch=cch;
    cout<<"computer chose "<< ch<<endl;
}

请注意,我没有包含我项目的所有内容

5 个答案:

答案 0 :(得分:9)

使用

cch = 'a' + rand()%26;

这会在'a'中添加一个随机数(在int等于97但是使用该数字会使代码的可读性降低),请记住'a' == 97因为C和C ++实际上并不关心你的数据类型。

因此,如果将其存储为char,则将其视为char

答案 1 :(得分:4)

查看ASCII表并注意有效字符介于97到122和65到90之间。我认为您需要小写字母。你可以选择一个随机的小写字母:

char x = 97 + rand() % 26;

答案 2 :(得分:3)

您可能会发现使用您想要选择的所有有效字符定义char数组更容易,然后选择0和数组中存储的字符数之间的随机字符;

char letters[] = "abcdefghijklmnopqrstuvwxyz";
char x = letters[rand() % 26];

它可能效率不高,但它会使你的意图更加清晰。

此外,如果您需要修改某些字符更频繁出现的概率,您可以通过多次添加相同的字符来实现。

答案 3 :(得分:0)

公式应为:cch = 97 + rand()%26;

答案 4 :(得分:0)

您不希望计算机一遍又一遍地猜测相同的字母。

#include <random>
#include <iterator>
#include <iostream>
#include <algorithm>

int main() {
  char letters[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                     's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

  std::random_device r;
  std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
  std::shuffle(std::begin(letters), std::end(letters),
               std::mt19937(seed));

  for (char c : letters) {
    std::cout << "Computer chose: " << c << '\n';
  }
}