C# 在c语言中生成非重复字符串
目前我正在.NETCore3.1中编写一个基于控制台的程序。该程序的目标是让用户输入一个字符串,然后控制台将尝试猜测它。例如:C# 在c语言中生成非重复字符串,c#,.net,string,random,.net-core,C#,.net,String,Random,.net Core,目前我正在.NETCore3.1中编写一个基于控制台的程序。该程序的目标是让用户输入一个字符串,然后控制台将尝试猜测它。例如: What shall I guess: string Ok Guessing String... Code Cracked :) Your code is: string 无论如何,当我创建程序时,我遇到了一个问题。我创建的随机生成的字符串经常重复,如果代码更长,问题就会成倍增加 我用它来生成随机字符串 string passw = Console.Readline
What shall I guess: string
Ok Guessing String...
Code Cracked :) Your code is: string
无论如何,当我创建程序时,我遇到了一个问题。我创建的随机生成的字符串经常重复,如果代码更长,问题就会成倍增加 我用它来生成随机字符串
string passw = Console.Readline();
for (int i = 0; i > -1; i++)
{
var chars = "abcdefghijklmnopqrstuvwxyz";
var stringChars = new char[passw.Length];
for (int a = 0; a < passw.Length; a++)
{
stringChars[a] = chars[rnd.Next(chars.Length)];
}
var finalstring = new String(stringChars);
Console.WriteLine(finalstring);
if (finalstring== passw)
{
Console.WriteLine("");
Console.WriteLine("Password Guessed: " + finalstring);
Console.WriteLine("It took a total of: " + i + " guesses!");
Environment.Exit(0);
}
}
我怎样才能达到目标?我看到了一些关于列表和类似的东西,但我想知道是否有更好的方法来获得我想要的结果。非常感谢。如果需要,我可以澄清任何事情 这是一个猜词演示,以好莱坞风格完成: 最终输出: 因为破解密码时,您应该始终显示您的进度…并通过猜测随机排序的字母顺序来破解密码 制作人:
static void Main(string[] args)
{
string guess;
char response;
int tries = 0;
Random rnd = new Random();
var chars = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
do
{
Console.Clear();
Console.Write("Enter a word with no characters repeated in it: ");
string wordToGuess = Console.ReadLine().ToLower();
var letters = wordToGuess.ToCharArray().Distinct();
if (letters.All(c => char.IsLetter(c)) && letters.Count() == wordToGuess.Length && wordToGuess.Length > 0)
{
Console.WriteLine("Trying to guess your word...");
int row = Console.CursorTop;
Console.CursorVisible = false;
tries = 0;
do
{
tries++;
var shuffled = (chars.OrderBy(c => rnd.Next())).ToArray();
guess = new String(shuffled.Take(wordToGuess.Length).ToArray());
Console.SetCursorPosition(0, row);
Console.WriteLine("chars = " + new string(shuffled));
Console.Write("Guess: {0}, Tries: {1}", guess, tries.ToString("N0"));
} while (guess != wordToGuess);
Console.WriteLine();
Console.WriteLine("It took me {0} tries to guess your word: {1}", tries.ToString("N0"), guess);
}
else
{
Console.WriteLine("Invalid word to guess!");
}
Console.CursorVisible = true;
Console.Write("Play again? Y/N: ");
response = Console.ReadKey().KeyChar;
Console.WriteLine();
} while (response == 'y' || response == 'Y');
Console.Write("Press Enter to Quit");
Console.ReadLine();
}
洗牌,然后取一段长度。我创建的随机生成的字符串经常重复,这通常是因为在循环中创建了随机的实例。你的实际代码中有这个,但没有在这里显示吗?你能详细解释一下shuffle方法吗?我的实例或random在循环之外。我刚刚注意到一个事实,当它创造了更多的时候,它变得非常明显,重复的数量我没有看到任何重复…你能发布你的完整代码吗?当你说“重复”时,你是说相同的最终字符串被一遍又一遍地写入控制台吗?或者你的意思是,每一个特定的结局有时包含同一个角色不止一次?这是一个非常酷的方式来完成我的任务。通过删除.distinct,它将能够正确地猜测具有重复字符的单词?嗯,删除.distinct和相关代码将允许用户输入具有重复字符的单词。但是,随机字算法不允许重复,因为字符字符串中每个字母只有一个,我们所做的就是对这些字符的顺序进行洗牌,并取其中的前X个字符。