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

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

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

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

Q&A

3回答

4566閲覧

[c#] テキストボックスの中の数字を漢字に置き換えしたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2018/08/04 07:20

###実現したいこと
c#のテキストボックスに数字が入ったらその数字を漢字にするプログラムを作りたいです。

100

一〇〇

該当のソースコード

c#

1 if (txtDisplay.Text.IndexOf("0") >= 0) 2 { 3 return; 4 } 5 else 6 { 7 //ここに漢字に置き換えるソースを書く 8 }

前提

テキストボックスの名前 : txtDisplay
書き換えるボタン : kan
###やりたい理由
電卓を作っていてネタ系機能として実装したい

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

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

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

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

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

papinianus

2018/08/04 17:07

もはやどうでいいが、このif分岐をしてelse側に実装したら、0が含まれる数値では漢字におきかわらないように思う。100は一〇〇っていってるのに。
papinianus

2018/08/04 17:08

さらにどうでもいいが、こういうとき、//のところに実装しないほうがいいよ。それは出力するためのところだから。そういう書き方したらテストできない
guest

回答3

0

ちょ、退会すんなよ。

100を百にしようと思うと大変だけど、一〇〇でいいなら、Linqで。

csharp

1static string ConvertToKansuji(int n) => string.Concat(EnumerateDigits(n).Select(i => ToKansujiOnBaseByString(i)).Reverse()); 2static string ConvertToKansuji(string str, bool onlyDigits = false) => string.Concat(str.ToCharArray().Where(c => !onlyDigits || char.IsDigit(c)).Select(c => char.IsDigit(c) ? ToKansujiOnBaseByDictionary(c) : $"{c}")); 3static IEnumerable<int> EnumerateDigits(int n, int unit = 10) 4{ 5 while (n >= unit) 6 { 7 yield return n % unit; 8 n = n / unit; 9 } 10} 11static string ToKansujiOnBaseByString(int n, int unit = 10) => unit > 10 || n >= unit ? throw new InvalidOperationException("illegal") : $"{"〇一二三四五六七八九"[n]}"; 12static string ToKansujiOnBaseByArray(int n, int unit = 10) => unit > 10 || n >= unit ? throw new InvalidOperationException("illegal") : (new[] { "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九", })[n]; 13static string ToKansujiOnBaseByDictionary(char n, int unit = 10) => unit > 10 || !char.IsDigit(n) || (int)char.GetNumericValue(n) >= unit ? throw new InvalidOperationException("illegal") : (new Dictionary<char, string> { { '0', "〇" }, { '1', "一" }, { '2', "二" }, { '3', "三" }, { '4', "四" }, { '5', "五" }, { '6', "六" }, { '7', "七" }, { '8', "八" }, { '9', "九" }, })[n];

投稿2018/08/04 17:05

編集2018/08/06 14:27
papinianus

総合スコア12705

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

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

BeatStar

2018/08/06 01:03

あ、そういえば配列 ( ArrayList, List, std::vector etc. ) もありましたね...
papinianus

2018/08/06 08:04

不勉強で申し訳ないです。適切な反応となっていないかもしれません。 私としては、Linqつまりジェネリックな列挙インターフェースでの解決を考えたつもりでおります。 漢数字を配列にした点については、C#ももちろん文字列にインデクサがありますので、"〇一二"とかいった文字列で持つことは可能です。
guest

0

うん?
普通に組めばいいじゃん。

数列としてじゃなくて,私なら,「文字列として」計算するね。

C#はやっていないけど、TextBoxとかって基本的に Stringとかの文字列として返すはずだから、

C#

1String result; 2for( int i = 0; i < text.length(); i++ ){ 3 result += text[i]; 4}

みたいにTextBoxに入っている文字列を配列と見立ててfor文でループしながら処理。C++だと拡張forにあたるものがあるならそれでもいいけど。

で、result に追加するための処理は if文で分岐。

'1' のとき: "一" '2' のとき: "二" '3' のとき: "三" ...

みたいになるようにするなら、

もし"1234"と入力されていたなら、

初回(i=0): text[0] -> '1' -> "一" 二回目(i=1): text[1] -> '2' -> "二" 三回目(i=2): text[2] -> '3' -> "三" 四回目(i=3): text[3] -> '3' -> "四" 結果: "一二三四"

となるはず。

投稿2018/08/04 07:37

BeatStar

総合スコア4962

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

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

退会済みユーザー

退会済みユーザー

2018/08/04 07:48

できればコピペ用のソースお願いします・・・
BeatStar

2018/08/04 09:20

コピペって...それ質問者さんが自分で組んだことになるんでしょ? 自分で調べようともしない、自分で組もうともしない。 挙句の果て、次はたぶんこの質問自体消すか退会するかでしょ。 誰も相手しなくなるよ?
guest

0

「c# 漢数字 変換」でぐぐってみると解説が出てきます

投稿2018/08/04 07:31

y_waiwai

総合スコア88049

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問