2017-01-10 2 views
0
  1. Привет, ребята, поэтому мне нужно добавить «пробел» между каждым символом в отображаемом текстовом поле.Добавление 'space' в текстовое поле C#

  2. Я даю пользователю замаскированный слово, как этот He__o для него, чтобы догадаться, и я хочу, чтобы преобразовать это в H e _ _ o

  3. Я использую следующий код, чтобы случайным образом заменить символы с '_'

    char[] partialWord = word.ToCharArray(); 
    
        int numberOfCharsToHide = word.Length/2;   //divide word length by 2 to get chars to hide 
        Random randomNumberGenerator = new Random();  //generate rand number 
        HashSet<int> maskedIndices = new HashSet<int>(); //This is to make sure that I select unique indices to hide. Hashset helps in achieving this 
        for (int i = 0; i < numberOfCharsToHide; i++)  //counter until it reaches words to hide 
        { 
         int rIndex = randomNumberGenerator.Next(0, word.Length);  //init rindex 
         while (!maskedIndices.Add(rIndex)) 
         { 
          rIndex = randomNumberGenerator.Next(0, word.Length); //This is to make sure that I select unique indices to hide. Hashset helps in achieving this 
         } 
         partialWord[rIndex] = '_';      //replace with _ 
        } 
        return new string(partialWord); 
    
  4. Я попытался: partialWord[rIndex] = '_ '; однако это приводит к ошибке «Слишком много символов в буквальном»

  5. Я попытался: partialWord[rIndex] = "_ "; однако это возвращает ошибку «Невозможно преобразовать строку типа в char.

Любая идея, как я могу приступить к достижению пространства между каждым персонажем?

Благодаря

+0

Не дубликат (насколько я знаю), но с немного прибегая к помощи вы бы нашел: http://stackoverflow.com/questions/7189293/add-spaces-between-the-characters-of -a-string-in-java, из которой вы можете почти непосредственно скопировать петли. – VinKel

ответ

2

Следующий код должен делать, как вы просите. Я думаю, что код довольно понятный, но не стесняйтесь спрашивать, неясно, почему и как из кода.

// char[] partialWord is used from question code 
char[] result = new char[(partialWord.Length * 2) - 1]; 
for(int i = 0; i < result.Length; i++) 
{ 
    result[i] = i % 2 == 0 ? partialWord[i/2] : ' '; 
} 
return new string(result); 
+0

благодарит @ prof1990 за ваше понимание. –

+0

можете ли вы прокомментировать строку 'result [i] = i% 2 == 0? partialWord [i/2]: ''; '. Я не совсем понимаю смысл «result [i] = i% 2 == 0?' –

+0

, когда я это реализовал, этот код меняет исходный код так, как мне не удается понять, и все мои слова оставляя только одну неизвестную букву, тогда как перед неизвестными буквами или «_» было «int numberOfCharsToHide = word.Length/2; ' –

2

Поскольку результирующая строка длиннее исходной строки, вы не можете использовать массив только один обугленный, так как его длина постоянна.

Вот решение с StringBuilder:

var builder = new StringBuilder(word); 
for (int i = 0 ; i < word.Length ; i++) { 
    builder.Insert(i * 2, " "); 
} 
return builder.ToString().TrimStart(' '); // TrimStart is called here to remove the leading whitespace. If you want to keep it, delete the call. 
+0

вы можете использовать массив символов, потому что вы «знаете» длину последней строки. – prof1990

+0

@ prof1990 Да, это может быть сделано с двумя массивами символов, но не с одним. Вот почему я сказал: «Нельзя использовать массив _a_ char». Мне просто нравится использовать StringBuilder более лично. – Sweeper

+0

для каждого является собственным, но могу ли я предложить вам пояснить свой ответ, говоря, что это невозможно сделать, используя только один массив символов? – prof1990

Смежные вопросы