簡體   English   中英

用 C# 中的單詞替換字符串中的 0 - 10 個數字

[英]Replace 0 - 10 numbers in string with words in C#

我面臨的問題是我必須將輸入中的 0 - 10 替換為它們各自的單詞,如“2” - 兩個,這將是一個字符串。 示例:當輸入顯示“11 個蘋果和 2 個芒果”時,我得到的 output 是“一個蘋果和兩個芒果”。 預期 Output:“11 個蘋果和兩個芒果”。 這是我的一次嘗試,但失敗了。

 string str = Console.ReadLine();
                string[] strArr = str.split(" ");
                Regex rgx = new Regex("^[0-9]{2}");
                var val = rgx.isMatch(strAtr[i]);
                if(!val){
                        StringBuilder sb = new StringBuilder(str);
                        sb.Replace("0", "zero");
                        sb.Replace("1", "one");
                        sb.Replace("2", "two");
                        sb.Replace("3", "three");
                        sb.Replace("4", "four");
                        sb.Replace("5", "five");
                        sb.Replace("6", "six");
                        sb.Replace("7", "seven");
                        sb.Replace("8", "eight");
                        sb.Replace("9", "nine");
                        sb.Replace("10", "ten");
                      }
                       Console.WriteLine(sb.ToString());

我將在下面留下我的原始答案,這是一個很好的答案,看起來你在問這個問題,直到你在評論中澄清了一些事情。

我相信這回答了你的問題:

 const string mangoesPattern = @"\d+";
 var mangoesRegex = new Regex(mangoesPattern);
 const string mangoesSource = "I have 5 apples, 11 mangoes, 675 oranges, 3 grapes and 27 coconuts";

 var mangoesDictionary = new Dictionary<int, string>
 {
     {0, "zero"},
     {1, "one"},
     {2, "two"},
     {3, "three"},
     {4, "four"},
     {5, "five"},
     {6, "six"},
     {7, "seven"},
     {8, "eight"},
     {9, "nine"},
     {10, "ten"},
 };

 var mangoesMatches = mangoesRegex.Matches(mangoesSource);
 var buffer = new StringBuilder();
 var lastProcessedIndex = 0;
 var originalStringLength = mangoesSource.Length;

 foreach (var match in mangoesMatches.Cast<Match>())
 {
     var numGroup = match.Groups[0];
     var num = int.Parse(numGroup.ToString());       //it's necessarily a number, so it should work
     if (mangoesDictionary.ContainsKey(num))
     {
         buffer.Append(mangoesSource.Substring(lastProcessedIndex, numGroup.Index - lastProcessedIndex));
         buffer.Append(mangoesDictionary[num]);
         lastProcessedIndex = numGroup.Index + numGroup.Length;
     }
 }

 //pick up the rest of the string
 buffer.Append(mangoesSource.Substring(lastProcessedIndex, originalStringLength - lastProcessedIndex));

它在您的源字符串中查找任何 integer 子字符串,然后遍歷匹配項和組,檢查 integer 的值和您要翻譯的數字之間是否存在翻譯。 如果有,它會進行替換。

翻譯后,原文出處:

I have 5 apples, 11 mangoes, 675 oranges, 3 grapes and 27 coconuts

結束為:

I have five apples, 11 mangoes, 675 oranges, three grapes and 27 coconuts

這是我的原始答案,當我認為您的問題是關於“如何將數字轉換為文本”時。

順便說一句,你真的需要充實你的問題。 閱讀所有評論並解決您的問題。 使用我的蘋果和芒果串作為你想要的行為的例子


這看起來像是一項家庭作業。 我不做其他人的功課,但我會給出一大堆提示作為答案。

首先考慮問題空間:

  • 數字 0-19 很特殊,確實需要按照您在顯示的代碼中的方式進行處理(作為一組表示數字的字符串)
  • 從 20 開始一直到 99,您可以取第一個數字,給它一個名字(如“三十”)並取第一條規則中的一個數字(這樣 43 就變成了“四十”、“三”)
  • 當你達到 100 時,你取第一個數字,應用第一條規則,添加字符串“百”,然后添加代表前兩條規則中最后兩位數字的數字(這樣 823 變為“八”,“百”、“二十”、“三”)。
  • 在 1000 到 999,999 之間,您將千位視為一到三位數字,在其后加上“千”,然后是后面三位數字的名稱(個/十/百部分)。 結果 236,117 變為“二”、“百”、“三十”、“六”、“千”、“一”、“百”、“十七”
  • 百萬、十億等都遵循與千相同的規則,在數字前面添加更多信息。

這應該足以讓您編寫一些代碼。

如果您考慮一下,則不需要那么多字符串。 20 個 0-19,然后 8 個 20-90。 然后是“百”、“千”、“百萬”等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM