随机数 65-90[az] 或 97-122[AZ]

发布于 2024-11-02 05:52:41 字数 166 浏览 0 评论 0原文

我需要 C 中的一个方法,十进制 65-90 [a - z] 和十进制 97-122 [A - <代码>Z]返回。如果我调用该方法,该方法必须是一个不同的数字,返回他之前给出的内容,我如何在 C 中执行此操作?

I need a method in C that the random number between decimal 65-90 [a - z] and decimal 97-122 [A - Z] returns. If I call the method the method must be a different number give back what he has previously given How can I do this in C ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

儭儭莪哋寶赑 2024-11-09 05:52:41
#include <stdlib.h>

char rand_az_AZ() {
    char val = rand() % 52;
    if (val < 26) {
        val += 'a';
    } else {
        val -= 26;
        val += 'A';
    }
    return val;
}
#include <stdlib.h>

char rand_az_AZ() {
    char val = rand() % 52;
    if (val < 26) {
        val += 'a';
    } else {
        val -= 26;
        val += 'A';
    }
    return val;
}
爱已欠费 2024-11-09 05:52:41

你能做一个0到52之间(不包括52)的随机数吗?

做吧!将结果加上 65。如果该值为 91 或更大,则将第二个结果加 6。 Voilà!

哦...如果数字与上次的数字相同(您将最后一个数字保存在静态变量中,不是吗?),请再做一次:)

Can you do a random number between 0 and 52 (excluding 52)?

Do it! Add 65 to the result. if the value is 91 or greater, add 6 to the 2nd result. Voilà!

Ohh ... if the number is the same as the one from last time (you saved last number in a static variable, didn't you?), do it again :)

伴我老 2024-11-09 05:52:41

给定一个返回 [0,n) 范围内的随机整数的函数 random_in_range:(

char random_letter()
{
    static const char letters[] = "abcdefghijlkmnopqrstuvwxyz"
                                  "ABCDEFGHIJLKMNOPQRSTUVWXYZ";
    return letters[random_in_range(sizeof(letters))];
}

random_in_range(n) 的简单实现将返回 rand() % n但这不会返回均匀分布的整数。)

Given a function random_in_range that returns random integers in the range [0,n):

char random_letter()
{
    static const char letters[] = "abcdefghijlkmnopqrstuvwxyz"
                                  "ABCDEFGHIJLKMNOPQRSTUVWXYZ";
    return letters[random_in_range(sizeof(letters))];
}

(A simple implementation of random_in_range(n) would return rand() % n. That wouldn't return uniformly distributed integers, though.)

故人爱我别走 2024-11-09 05:52:41

更新 2

根据 Interjay 的评论再次更新。

更新

根据 Interjay 的评论进行了更改。还更改了 pickChar,以便我们不依赖于特定的编码。

警告:不建议使用 % 运算符将 rand 的结果映射到不同的范围。低阶位模式不能保证均匀分布,并且您可能会得到非正态分布的值。它对于课堂作业来说已经足够好了,但是下面的过程应该会给出更好的结果:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randInRange(int min, int max) 
{
  return (int)(((double) rand() / (double)(RAND_MAX + 1)) * (max - min + 1)) + min;
}

char pickChar(void)
{
  char val; 
  int cas = randInRange(0, 1);

  if (cas == 1)
    val = (char) randInRange('A', 'Z');
  else
    val = (char) randInRange('a', 'z');

  return val;
}

int main(void)
{
  char results[11] = {0};
  int i;

  srand(time(NULL));  // seed the random number generator

  for (i = 0; i < sizeof results - 1; i++)
    results[i] = pickChar();

  printf("Random string: %s\n", results);
  return 0;
}

UPDATE 2

Again updated per Interjay's comment.

UPDATE

Made changes per Interjay's comment. Also changed pickChar so that we aren't relying on a particular encoding.

Warning: using the % operator to map the results of rand to a different range is not recommended. Low-order bit patterns are not guaranteed to be evenly distributed, and you could get a non-normal distribution of values. It works well enough for class assignments, but the procedure below should give better results:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int randInRange(int min, int max) 
{
  return (int)(((double) rand() / (double)(RAND_MAX + 1)) * (max - min + 1)) + min;
}

char pickChar(void)
{
  char val; 
  int cas = randInRange(0, 1);

  if (cas == 1)
    val = (char) randInRange('A', 'Z');
  else
    val = (char) randInRange('a', 'z');

  return val;
}

int main(void)
{
  char results[11] = {0};
  int i;

  srand(time(NULL));  // seed the random number generator

  for (i = 0; i < sizeof results - 1; i++)
    results[i] = pickChar();

  printf("Random string: %s\n", results);
  return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文