質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

6828閲覧

漢数字にカンマを三桁ごとに付け加えたいです。

57svu

総合スコア28

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2017/05/22 06:01

お世話になています。
某サイトの問題にてうまくいかないことがあります。
問題内容は
『キーボードから整数の値を入力すると、その値が漢数字で出力されるプログラムを作りなさい。
このとき、用いられるのは、1から9に対応するのが、一から九までの漢字で、ゼロは、〇と表示するようにしなさい。
また、この数字と漢字の対応は、HashMapを用いて作りなさい。
また、結果を出力する際には、3桁ごとに「,」(コンマ)を出力すること。』
とのことです。
HashMapを用いてという記述はこちらでDictionary型だと意図をくみ取りその形式でコードを書いてみました。

そこで問題を先ずあげると
入力された算用数字自体をカンマ区切りにすること
漢数字に変換する
までは成功したのですが
漢数字に変換した際にせっかく付け加えたカンマが最後コンソールで出す際に消えてしまいます。

自分なりに調べた結果
カンマを付け加えたFormatメソッドはあくまで表示形式を変更するだけで
実質は変わらないのではないのかと考察しました。

そこでString.Splitを使い
漢数字に変換した文字列を三桁ごとに区切り
カンマをつけようかと思ったのですが
ただの文字が連続した文字列をどのように三桁ごとに分解する
条件を設定すればいいのか分からなくなり、投稿させて頂きました。

自分の疑問点をまとめると
1、最初のformatメソッドはあくまで表示形式の変更のみなのか、またそうだとしたら文字列には宛がうことは可能なのか
2、String.Splitを使った場合、漢数字をどのように三桁に分解し、桁数に応じて正しくカンマを付加すればいいのか

以上②点です。
宜しくお願いします。

自分が書いたコードです。

c#

1 2 Dictionary<string, string> tranceNumber = new Dictionary<string, string>(); 3 // 対応する数字の漢数字を1から9まで、0は○で用意する 4 5 tranceNumber ["1"]="一"; 6 tranceNumber ["2"]="二"; 7 tranceNumber ["3"]="三"; 8 tranceNumber ["4"]="四"; 9 tranceNumber ["5"]="五"; 10 tranceNumber ["6"]="六"; 11 tranceNumber ["7"]="七"; 12 tranceNumber ["8"]="八"; 13 tranceNumber ["9"]="九"; 14 tranceNumber ["0"]="○"; 15 16 Console.WriteLine("整数の値を入力してください:"); 17 // 入力された文字列をString化し変数として格納 18 string typedText = Console.ReadLine(); 19 // 文字列が整数の値に変換できるか判別 20 // trueならカンマが三桁毎に付くよう変更し元の文字列に格納 21 int number; 22 if (int.TryParse(typedText, out number)) 23 { 24 string withComma = string.Format("{0:#,0}", number); 25 typedText = withComma; 26 } 27 else 28 { 29 Console.WriteLine("整数の値を入力してください"); 30 } 31 // 確認用にここでひとまず表示 32 Console.WriteLine(typedText); 33 34 // String型のtypedTextを一文字毎に判別し 35 // 漢数字に変換したいのでchar型に変換 36 foreach (char oneCharacter in typedText) 37 { // 行で漢数字に変換したのでtypedTextに再変換 38 typedText = oneCharacter.ToString(); 39 // Dictionary tranceNumberに typedTextの文字が含まれているならtrue 40 if (tranceNumber.ContainsKey(typedText)) 41 { 42 Console.Write(tranceNumber[typedText]); 43 } 44 } 45

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

環境がわかりませんが、Console.WriteLineでデバッグしようとしているところを見ると、ブレイクポイントの使い方などには不慣れな感じでしょうか?
oneCharacterで1つづつChar型に分解していますが、その中には出力されてほしい「,」も含まれていますね。
それがtranceNumber.ContainsKey(typedText)ではどうなるでしょう?

あと、typedTextが2通りの意味を持ってしまってわかりづらくなっているので、どちらかは変数名を変えた方がよりわかりやすくなります。

投稿2017/05/22 06:37

caf2for4

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/05/22 06:43

丁寧なご指摘ありがとうございます。 デバッグ実行してみたところ、カンマも識別されているのに自分のDictionaryに登録していないのが原因だと理解出来ました。 変数名も途中で変更します。
guest

0

実際に入力した数字がどうなるか処理を追えばすぐわかります。

投稿2017/05/22 06:25

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/05/22 06:45

すぐわかりました。 的確なご意見ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問