RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1364547
Accepted
Zekoyka
Zekoyka
Asked:2022-05-22 01:33:48 +0000 UTC2022-05-22 01:33:48 +0000 UTC 2022-05-22 01:33:48 +0000 UTC

无法将类型“char”隐式转换为“string”

  • 772

密码生成器程序。有一个选择——添加密码символами。我创建了一个将数据写入自身的变量,textBox2.Text然后在循环中执行生成。但是会发生错误Ошибка CS0029 Не удается неявно преобразовать тип "char" в "string".。

我尝试将char输入数据转换为变量,但没有帮助。告诉我如何正确地做。

我也想混合这两个结果(这样它们混合起来,输出密码更可靠),告诉我如何实现它。

编码:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string data = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
            char symbols = Convert.ToChar(textBox2.Text);
            int lon = (int)numericUpDown1.Value;
            string result = "";
            string result_symbols = "";
            Random rnd = new Random();
            int lng = data.Length;
            int lng2 = data.Length;



            for (int i = 0; i < lon; i++)
            {
                result_symbols = Convert.ToChar(symbols[rnd.Next(lng)]);
                result += data[rnd.Next(lng)];
            }

            textBox1.Text = result;
        }
    }

程序截图:

在此处输入图像描述

c#
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. pasx
    2022-05-22T02:16:54Z2022-05-22T02:16:54Z

    这是一个简单的实现。仅将常量初始化一次作为常量或类变量。将实用程序功能与 UI 代码分开。

        private const string Letters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        private const string Symbols = "~...";
        private readonly char[] _lettersAndSymbols = (Letters + Symbols).ToCharArray();
        private readonly int _lettersAndSymbolsLength = (Letters + Symbols).Length;
        private readonly Random _rnd = new Random();
    
        public Form1()
        {
            InitializeComponent();
            textBox2.Text = Symbols ;
        }
    
        private string GeneratePassword(int length)
        {
            var result = string.Empty;
            for (var i = 0; i < length; i++)
            {
                result += _lettersAndSymbols[_rnd.Next(_lettersAndSymbolsLength)];
            }
    
            return result;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            var lon = (int)numericUpDown1.Value;
            textBox1.Text = GeneratePassword(lon);
        }
    
    • 1
  2. Yotic
    2022-05-22T02:30:37Z2022-05-22T02:30:37Z

    这里有一个更正确的代码,有问题就写

     public partial class Form1 : Form
        {
            string standard = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                List<char> symbols = textBox2.Text.ToList();
                string result = "";
                Random rnd = new Random();
                for (int i = 0; i < (int)numericUpDown1.Value; i++)
                    result += symbols[rnd.Next(0, symbols.Count)].ToString();
                textBox1.Text = result;
            }
        }
    
    • 1
  3. Best Answer
    aepot
    2022-05-22T02:45:33Z2022-05-22T02:45:33Z

    假设您有一个字符串列表,每个字符串代表一个特定范围。创建一个控制台应用程序来测试我将展示的代码是如何工作的,然后才将其传输到您的项目中。

    但首先,让我们创建一个从所需长度的所需字符生成字符串的方法。始终将您的任务分解为方法,因此使用代码会更容易。

    private string GetRangeString(char first, int length)
    {
        return string.Concat(Enumerable.Range(first, length).Select(c => (char)c));
    }
    

    要了解如何以这种方式组成字符范围 - 查看 ASCII 字符表,您会立即清楚英文字母和数字是按顺序排列的。对俄罗斯人来说更困难,那里并不是一切都井井有条,但你似乎不需要他们。对于俄罗斯人,C# 使用 UTF-16 (Unicode) 编码。

    接下来,您可以开始从所需的字符集编译字典。

    List<string> list = new List<string>();
    list.Add(GetRangeString('A', 26)); // ABCDEFGHIJKLMNOPQRSTUVWXYZ
    list.Add(GetRangeString('a', 26)); // abcdefghijklmnopqrstuvwxyz
    list.Add(GetRangeString('0', 10)); // 0123456789
    list.Add("=/.;!?");                // =/.;!?
    

    如您所见,您可以简单地将包含任何内容的行添加到列表中。我建议使用该列表,以便您只需if在代码中添加一些复选框即可通过界面中的复选框和设置来控制字典的内容。

    现在我们需要从中组成一串唯一字符。

    string dictionary = string.Concat(string.Concat(list).Distinct());
    Console.WriteLine(dictionary);
    

    (对于有经验的人:是的,Linq 在这里也很好用SelectMany)

    完成,输出到控制台

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789=/.;!?
    

    Distinct()只是从字符串中删除重复的字符。

    现在使用这本字典作为所需长度的密码

    int length = 8;
    Random rnd = new Random();
    
    string password = string.Concat(Enumerable.Repeat(0, length).Select(_ => dictionary[rnd.Next(dictionary.Length)]));
    
    Console.WriteLine(password);
    

    这就是所有的解决方案。当然,我经常使用 Linq,但同样可以用像你这样的简单循环来完成。这个答案的重点只是展示如何自己从多个集合中创建一个字符字典。

    顺便说一句,要在循环中遍历字符串,不需要将其转换为字符数组,因为字符串是字符数组,并且可以通过索引以相同的方式访问这些字符,如一个常规字符数组。唯一的区别是您将无法覆盖字符串中的字符,而只能读取。

    控制台输出

    LS4gAZ.J
    

    所有可玩的代码

    static void Main(string[] args)
    {
        List<string> list = new List<string>();
        list.Add(GetRangeString('A', 26));
        list.Add(GetRangeString('a', 26));
        list.Add(GetRangeString('0', 10));
        list.Add("=/.;!?");
    
        string dictionary = string.Concat(string.Concat(list).Distinct());
        Console.WriteLine(dictionary);
    
        int length = 8;
        string password = GeneratePassword(dictionary, length);
        Console.WriteLine(password);
    }
    
    private static string GeneratePassword(string dictionary, int length)
    {
        Random rnd = new Random();
        return string.Concat(Enumerable.Repeat(0, length).Select(_ => dictionary[rnd.Next(dictionary.Length)]));
    }
    
    private static string GetRangeString(char first, int length)
    {
        return string.Concat(Enumerable.Range(first, length).Select(c => (char)c));
    }
    
    • 1

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5