【问题标题】:Generate random string based on custom pattern in C#在 C# 中根据自定义模式生成随机字符串
【发布时间】:2020-11-15 11:29:29
【问题描述】:

我希望能够根据用户使用 Console.ReadLine(); 设置的自定义模式生成随机字符串

示例:!!!!-##!?-?!!#(! = 数字,# - 大写字母和 ? = 小写字母),然后生成一个字符串并使用 Console.WriteLine(); 返回它

我试图寻找解决方案,但我认为它与我的问题不符。

【问题讨论】:

  • 您尝试了哪些方法,哪些方法不适合您?
  • 轻松开始。你知道如何创建一个介于 0(包括)和 10(不包括)之间的随机数吗?例如,65 和 91 或 97 和 123 之间的随机数怎么样?你知道如何把一个数字变成一个(ascii)字符吗?你知道如何迭代字符串的每个字符(比如给定的模式)吗?您知道如何根据(角色的)某个值切换工作流程吗?你知道如何将字符组合成一个字符串吗?

标签: c# code-generation


【解决方案1】:

我们制作了生成大写和小写字母的函数,我们还快速生成了数字,然后我们只需打开传递的“模式”字符串的字符

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(GetStringFromPattern("!!##??##!!"));
    }
    static string GetStringFromPattern(string s)
    {
        string final = String.Empty;
        foreach(char c in s)
        {
            switch (c)
            {
                case '!':
                    Random rng = new Random();
                    final += rng.Next(0, 9);
                    break;
                case '#':
                    final += GenerateLetter(true);
                    break;
                case '?':
                    final += GenerateLetter(false);
                    break;
            }
        }
        return final;
    }

    static char GenerateLetter(bool uppercase)
    {
        Random rng = new Random();
        int letterCode = rng.Next(65, 89);

        if (uppercase)
            letterCode += 32;

        char letter = (char)letterCode;

        return letter;
    }

}

【讨论】:

  • 一个 Random 对象可以生成无限数量的值 - 不要在循环中创建它们。
  • 请问如何让它每次都返回一个新字母? @克里斯蒂安
  • @vexisz:首先正如 Nyssa 指出的那样,您应该只有一个 Random 实例。如果您一个接一个地创建一个,它将返回相同的伪随机数序列。其次,重要的是要知道随机数可能会重复(如果您正在玩骰子游戏,如果连续两个(甚至三个)掷出相同的值,没有人会感到惊讶)。它不应该经常发生,但它会发生
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 2017-05-07
  • 2010-09-26
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多