私は基本的なハングマンゲームを書いています。私は、文字列Wordをユーザーが見つける単語として保存したい。私の問題は、この単語をアンダースコア(あなたが紙掛け人のように)で表示したいが、文字列の値を保持したいということです。私の友人は、これはRegexを介して行うことができると述べたが、それを研究することは私を助けてくれないようだ。文字列をアンダースコアで表示しますが、値を保持する
答えて
が、HashSet
一部importangポイントを使用している、と言います状態:発見された(HS内に存在する)、発見されない(存在しない)。パラメータStringComparer.InvariantCultureIgnoreCase
としてHashSet
を渡すと、L
とl
が同じものとみなされるため、初期化します。 StringComparer.InvariantCultureIgnoreCase
を使用するには、HashSet<char>
(HSはchar
s)の代わりにHashSet<string>
(HSはstring
s)を使用する必要があります。 discovered.Contains()
を使用している場合だから我々は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を行っている可能性
とstring
にc
char
を変換する必要がありますが、今日はそれは十分:-)
大丈夫です。 ..私はC#4.0で、あなたの例をあげる:
static string ConvertWord(string word, HashSet<string> discovered)
{
return string.Concat(word.Select(p => discovered.Contains(p.ToString()) ? p : '_'));
}
を自分のパスワード文字を設定し、その後、テキストボックスを使用し、パスワードとしてそのエントリタイプを持っていないことは良いアプローチのように見えるしていません。私は代わりに単語をつかみ、それを文字に分解してDictionary<char,bool>
を作ります。bool
は文字がまだ発見されているかどうかを示します。その後、Dictionary
の見た目と、各項目の文字が見つかった場合はchar
、そうでない場合はアンダースコアが表示されます。
これがまさにあなたが望むものなのかどうかはわかりませんが、参考にしてください。
ゲームはsedとechoによってシミュレートされました。もちろん、秘密の言葉に変数を使うことができ、平文としてエコーすることはできません。最後に文字が2を持つことができるので、我々はHashSet
を使用している:
は私の秘密の言葉は、「メモリ」
#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
を私は正規表現を気にしないだろう - あなたは表現する文字の配列を取るためにかなり単純な関数を書くことができます推測がなされ、必要に応じて単語の表現を返します。
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. 文字列がInteger.MAX_VALUEより大きい文字数を保持できます
- 3. アセンブリコードで文字列を表示する
- 4. PHP文字列内に特殊文字を保持する
- 5. 内部文字を保持するC#文字列トリム
- 6. Hibernate:オブジェクトを文字列として保持しますか?
- 7. R文字列を分割し、一致する部分文字列を右手に保持しますか?
- 8. 数値を表示文字列に変換する方法
- 9. appWidgetのTextviewに文字列値を表示する
- 10. PHP - 文字列と数値の行列を保持するデータ構造
- 11. 文字列をランダムに表示する -
- 12. JLabelはどのようにアンダースコア文字を表示しませんか?
- 13. 正規表現で文字列名がJavaのアンダースコアでチェックされる
- 14. タイマーを使用して文字列を文字列に表示する
- 15. 表示文字列、
- 16. Pythonでデリミタを保持する文字列をトークン化
- 17. インデックス文字列の対応を保持するスパーク文字列インデクサ
- 18. drawStringでフレームに文字列を表示していますか?
- 19. TextViewが文字列リソースを表示するデザイナーエラーをスローする
- 20. 文字列の文字をJavaScriptのアンダースコアに置き換えます。
- 21. アンダースコアをJava文字列の大文字に置き換えます。
- 22. テキスト文字列を保持するビットマップサイズを決定する
- 23. ASP.NET MVC 3 - Boolとして文字列値を表示
- 24. 文字列分割 "\"文字を非表示にして削除します
- 25. 正規表現でエラーメッセージを示す文字列を検索するが、特定の文字列を避ける
- 26. 上付き文字のテキストを保存して表示する
- 27. PHPヘッダがクエリ文字列を保持しない
- 28. Modrewriteで数字、文字、アンダースコアを使用できます
- 29. Androidで複数の文字列配列を表示する
- 30. ランダムに表示する文字列
あなたの答えを試してみると、HashSetに 'タイプ/ NSが見つかりません'というエラーが表示されています。私はsys.collections.genericを参照しています。 – MaxWillmo
@MaxWillmoどのバージョンのC#を使用していますか?これはC#/。NET> = 3.5用であり、 'System.Core'参照に追加する必要があります。 – xanatos
@MaxWillmo Test here http://ideone.com/Mc2oM – xanatos