我正在写一个基本的hang子手游戏。我想存储一个字符串Word作为用户找到的单词。我的问题是,我想显示这个词作为下划线(就像你在一个纸hang子手中做的),但保持它的字符串值。我的一个朋友说这可以通过Regex完成,但研究它似乎并不能帮助我。显示字符串作为下划线但保持价值
3
A
回答
4
至于建议的Farinha,但使用HashSet
一些importang点:我们使用的是HashSet
因为最终的字母可以有两个状态:发现(存在于HS中)或未发现(不存在)。我们将HashSet
初始化为参数StringComparer.InvariantCultureIgnoreCase
,因为我们认为L
和l
是同一件事。要使用StringComparer.InvariantCultureIgnoreCase
,我们必须使用HashSet<string>
(HS的string
s)而不是HashSet<char>
(HS的char
s)。因此,使用discovered.Contains()
当我们到c
char
转换的string
与ToString
static string ConvertWord(string word, HashSet<string> discovered)
{
StringBuilder sb = new StringBuilder(word.Length);
foreach (char c in word)
{
if (discovered.Contains(c.ToString()))
{
sb.Append(c);
}
else
{
sb.Append('_');
}
}
return sb.ToString();
}
HashSet<string> discovered = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
// The "secret" word
string word = "Hello world";
// How to add letters to the ones discovered
discovered.Add("l");
// The word ready to be shown
string convertWord = ConvertWord(word, discovered);
我们可以做的ConvertWord在更短的字符,但今天它足够:-)
确定。 ..我给你举个例子,在C#4.0:
static string ConvertWord(string word, HashSet<string> discovered)
{
return string.Concat(word.Select(p => discovered.Contains(p.ToString()) ? p : '_'));
}
0
1
使用正则表达式似乎不是一个好方法。相反,我会抓住这个词,把它分解成字符,然后构建一个Dictionary<char,bool>
,其中bool
表示该字母是否已被发现。然后你看看Dictionary
,如果发现了这封信,每个项目都会显示char
,如果没有,则显示下划线。
// build the Dictionary
string originalWord = "Stack Overflow";
Dictionary<char, bool> dict = new Dictionary<char, bool>();
for(int i = 0; i < originalWord.Length; i++)
dict.Add(originalWord[i], false);
// output the current state
string current = "";
foreach(KeyValuePair<char, bool> pair in dict)
{
current += pair.Value ? pair.Key.ToString() : "_";
}
1
我不知道如果这正是你想要的,但如果它是有帮助的,你可以去看看。
游戏是由sed和echo模拟的。当然,你可以使用变量作为秘密词,而不是以纯文本形式回显。
说,我的秘密字是“记忆”
#user gives a letter "a"
kent$ echo "memory"|sed 's/[^a]/_/g'
______
#user gives a letter "r"
kent$ echo "memory"|sed 's/[^ar]/_/g'
____r_
#user gives a letter "m"
kent$ echo "memory"|sed 's/[^arm]/_/g'
m_m_r_
#user gives a letter "o"
kent$ echo "memory"|sed 's/[^armo]/_/g'
m_mor_
#user gives a letter "x"
kent$ echo "memory"|sed 's/[^armox]/_/g'
m_mor_
#user gives a letter "y" then "e"
kent$ echo "memory"|sed 's/[^armoxy]/_/g'
m_mory
kent$ echo "memory"|sed 's/[^armoxye]/_/g'
memory
0
我不会用正则表达式麻烦 - 你可以写一个相当简单的功能,采取代表一个字符数组该猜测作出,并根据需要返回字的表示:
string word = "AMBULANCE";
public string Hangman(char[] guesses)
{
char[] output = new char[word.Length];
for (int i = 0; i < word.Length; i++)
{
if (guesses.Contains(word[i]))
{
output[i] = word[i];
}
}
return new String(output).Replace('\0','_');
}
,然后使用类似称之为:
char[] guesses = new char[] { 'A', 'E' };
Console.WriteLine(Hangman(guesses));
Console.ReadLine();
相关问题
- 1. 文本下划线显示下划线
- 2. 如何在JavaScript字符串中显示下划线?
- 3. Vue.js将价值显示为价格,但保留为int
- 4. 显示作为字符串
- 5. 使用下划线作为标记的分割字符串
- 6. 如何显示加下划线为asp.net Label控件的部分字符串?
- 7. JSF:h:outputText;如何显示一个短划线的值是否为空字符串?
- 8. 从字符串中替换下划线
- 9. 替换字符串中的下划线
- 10. iTextsharp字符串之间的下划线
- 11. 下划线使用iText的字符串
- 12. 在字符串中使用下划线
- 13. 从字符串中删除下划线
- 14. gvim将下划线显示为空格
- 15. 突出显示或在一个字符串中加下划线的特定字
- 16. MVC字符串值保持Javascript代码,但的js犯规认识报价
- 17. 消毒filter_var PHP字符串,但保持“'
- 18. 使用下划线字符
- 19. 如何让字符串保持直线?
- 20. 我如何下划线分隔字符串转换为大写的字符串
- 21. 如何获取oracle中下划线之间的字符串值
- 22. 如何始终显示下划线字符? (C#Windows窗体)
- 23. url_title codeigniter显示下划线而不是连字符
- 24. JLabel如何不显示下划线字符?
- 25. 带tr翻译的SecureRandom字符串显示丰富的下划线?
- 26. 分裂字符串,但保持内部字符串完好?
- 27. 计划在整个计划中保持价值
- 28. 将下划线转换为Matlab字符串中的空格吗?
- 29. 如何将带下划线的字符串转换为unicode?
- 30. 显示下划线作为空间标签
在尝试你的答案时,我得到了'无法找到类型/ NS'HashSet错误。我引用了sys.collections.generic。 – MaxWillmo
@MaxWillmo您正在使用什么版本的C#?这是为C#/ .NET> = 3.5而且你必须添加到引用'System.Core' – xanatos
@MaxWillmo测试在这里http://ideone.com/Mc2oM – xanatos