如何生成长度小于/大于长度的字符串
How to generate a string with less than / more than length
我想让用户选择确切的长度,或者少于/多于要生成的字符数(在密码生成器中)。
例如我做了:
// the longivity of the generated string
var stringChars = new char[int.Parse(TextBox2.Text)];
var random = new Random();
for (int i = 0; i < stringChars.Length; i++)
{
// abc has been declared before, it is simply ABCD... for character generation
stringChars[i] = abc[random.Next(abc.Length)];
}
var finalString = new String(stringChars);
// this is the result box
TextBox1.Text = finalString;
现在我的问题是如果用户输入例如。 10,想要生成的字符串少于10个字符,怎么办?
例如,您可以这样做(借助 Linq 的强大功能):
public string GeneratePassword(string abc, int minLenght, int maxLenght)
{
var random = new Random();
var chars = Enumerable
.Range(0, random.Next(minLenght, maxLenght + 1)) // Generate a range between the min and max.
.Select(x => abc[random.Next(abc.Length)]) // Select a random character from the abc.
.ToList();
// Concatenate the string.
return string.Join(string.Empty, chars);
}
您必须使用 System.Linq
用法:
var input = 10;
var abc = "abcde";
var maxPasswordLength = 100;
var minPasswordLength = 1;
// More than the input.
GeneratePassword(abc, input + 1, maxPasswordLength);
// Less than the input.
GeneratePassword(abc, minPasswordLength, input - 1);
// Exact length.
GeneratePassword(abc, input, input);
public class Program
{
private const int MAX_LENGTH = 50;
static void Main(string[] args)
{
var less = GeneratedLessThan(12);
var more = GeneratedMoreThan(12);
Console.WriteLine($"Less Than : {less} ({less.Length})");
Console.WriteLine($"More Than : {more} ({more.Length})");
Console.ReadLine();
}
static char[] ABC()
{
List<char> list = new List<char>();
for (char i = 'A'; i <= 'Z'; i++)
{
list.Add(i);
}
return list.ToArray();
}
static string GeneratedLessThan(int max) => GeneratedString(0, max);
static string GeneratedMoreThan(int min) => GeneratedString(min, MAX_LENGTH);
static string GeneratedString(int min, int max)
{
StringBuilder builder = new StringBuilder();
var abc = ABC();
var rnd = new Random();
for (int i = 0; i <= rnd.Next(min, max); i++)
{
builder.Append(abc[rnd.Next(abc.Length)]);
}
return builder.ToString();
}
}
也许你不需要ABC功能。
输出:
Less Than : IORS (4)
More Than : BSVPFZVQRWZTSPYDI (17)
我想让用户选择确切的长度,或者少于/多于要生成的字符数(在密码生成器中)。
例如我做了:
// the longivity of the generated string
var stringChars = new char[int.Parse(TextBox2.Text)];
var random = new Random();
for (int i = 0; i < stringChars.Length; i++)
{
// abc has been declared before, it is simply ABCD... for character generation
stringChars[i] = abc[random.Next(abc.Length)];
}
var finalString = new String(stringChars);
// this is the result box
TextBox1.Text = finalString;
现在我的问题是如果用户输入例如。 10,想要生成的字符串少于10个字符,怎么办?
例如,您可以这样做(借助 Linq 的强大功能):
public string GeneratePassword(string abc, int minLenght, int maxLenght)
{
var random = new Random();
var chars = Enumerable
.Range(0, random.Next(minLenght, maxLenght + 1)) // Generate a range between the min and max.
.Select(x => abc[random.Next(abc.Length)]) // Select a random character from the abc.
.ToList();
// Concatenate the string.
return string.Join(string.Empty, chars);
}
您必须使用 System.Linq
用法:
var input = 10;
var abc = "abcde";
var maxPasswordLength = 100;
var minPasswordLength = 1;
// More than the input.
GeneratePassword(abc, input + 1, maxPasswordLength);
// Less than the input.
GeneratePassword(abc, minPasswordLength, input - 1);
// Exact length.
GeneratePassword(abc, input, input);
public class Program
{
private const int MAX_LENGTH = 50;
static void Main(string[] args)
{
var less = GeneratedLessThan(12);
var more = GeneratedMoreThan(12);
Console.WriteLine($"Less Than : {less} ({less.Length})");
Console.WriteLine($"More Than : {more} ({more.Length})");
Console.ReadLine();
}
static char[] ABC()
{
List<char> list = new List<char>();
for (char i = 'A'; i <= 'Z'; i++)
{
list.Add(i);
}
return list.ToArray();
}
static string GeneratedLessThan(int max) => GeneratedString(0, max);
static string GeneratedMoreThan(int min) => GeneratedString(min, MAX_LENGTH);
static string GeneratedString(int min, int max)
{
StringBuilder builder = new StringBuilder();
var abc = ABC();
var rnd = new Random();
for (int i = 0; i <= rnd.Next(min, max); i++)
{
builder.Append(abc[rnd.Next(abc.Length)]);
}
return builder.ToString();
}
}
也许你不需要ABC功能。
输出:
Less Than : IORS (4)
More Than : BSVPFZVQRWZTSPYDI (17)