2017-01-10 95 views
0
  1. 大家好,所以我需要在顯示的文本框中的每個字符之間添加一個「空格」。在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] = "_ ";但是,這會返回錯誤「無法將類型字符串轉換爲字符。

任何想法如何才能繼續實現每個字符之間的空間?

感謝

+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

您可以使用char數組,因爲您「知道」最終字符串的長度。 – prof1990

+0

@ prof1990是的,這可以用兩個字符數組來完成,但不能使用一個。這就是爲什麼我說「不能使用_a_字符數組」。我只是喜歡更個人地使用StringBuilder。 – Sweeper

+0

到每個都是自己的,但我可能建議你澄清你的答案,說它不能用一個字符數組完成? – prof1990