#c# #string #unity3d #random #char
#c# #строка #unity3d #Случайный #символ
Вопрос:
Как мне повторить генерацию случайного символа? Я хочу создать эффект искаженного текста, поэтому я установил:
textbox.text = st[Random.Range(0, st.Length)];
в моем методе обновления. Однако я получаю только один символ из этой строки — как мне повторить этот процесс в строке длиной 5? Чего я пытаюсь добиться, так это случайной генерации 5 символов снова и снова. Должен быть лучший способ, чем этот:
randomChar randomChar randomChar randomChar randomChar
Заранее благодарю вас!
Комментарии:
1. Ну, это всегда приводило бы к появлению 5 одинаковых символов. Как ААААА, что ты пробовал
2. Существует String() ctor, который принимает символ и возвращает его строку, повторяющуюся n раз.
3. Можете ли вы привести несколько примеров того, как будут выглядеть ваши строки до сбоев и после сбоев?
Ответ №1:
Можно было бы использовать что-то подобное:
public static readonly char[] CHARS = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
static void Main(string[] args)
{
static string GenerateGlitchedString(uint wordCount,uint wordslength)
{
string glitchedString = "";
for (int i = 0; i < wordCount; i )
{
for (int j = 0; j < wordslength; j )
{
Random rnd = new Random();
glitchedString = CHARS[rnd.Next(CHARS.Length)];
}
glitchedString = " "; //Add spaces
}
return glitchedString;
}
string output = GenerateGlitchedString(5, 5);
Console.WriteLine(output);
}
Ответ №2:
Вы можете использовать Linq для генерации любого количества случайных символов из перечисляемого:
int howManyChars = 5;
var newString = String.Join("", Enumerable.Range(0, howManyChars).Select(k => st[Random.Range(0, st.Length)]));
textbox.text = newString;
Ответ №3:
Если вам нужны полностью глючные строки, идите по пути Mojibake . Возьмите строку, преобразуйте ее в одну кодировку, а затем декодируйте ее по-другому. Большинство программистов в конечном итоге знакомятся с такого рода сбоями. Например, этот код:
const string startWith = "Now is the time for all good men to come to the aid of the party";
var asBytes = Encoding.UTF8.GetBytes(startWith);
var glitched = Encoding.Unicode.GetString(asBytes);
Debug.WriteLine(glitched);
последовательно приводит к:
潎⁷獩琠敨琠浩潦污潧摯洠湥琠潣敭琠桴楡景琠敨瀠牡祴
Но, если вам просто нужен текст с некоторыми случайными сбоями, как насчет чего-то подобного. Он использует набор символов, которые должны быть вставлены, подсчитывает, сколько сбоев должно быть в строке (в зависимости от длины строки), а затем случайным образом вставляет сбои:
private static Random _rand = new Random();
private const string GlitchChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%amp;";
public static string GlitchAString(string s)
{
var glitchCount = s.Length / 5;
var buffer = s.ToCharArray();
for (var i = 0; i < glitchCount; i)
{
var position = _rand.Next(s.Length);
buffer[position] = GlitchChars[_rand.Next(GlitchChars.Length)];
}
var result = new string(buffer);
Debug.WriteLine(result);
return resu<
}
Первые два раза, когда я запускал это (с той же Now is the time...
строкой), я получил:
Original String:
Now is the time for all good men to come to the aid of the party
First Two Results:
LowmiW HhZ7time for all good mea to comX to ths aid oV the p1ray
Now is fhO P!me forjall gKod men to @ome to the a@d of F5e Nawty
Алгоритм, в некоторой степени, настраивается. У вас может быть больше или меньше сбоев. Вы можете изменить набор символов сбоев — все, что пожелаете.