I encountered the requirement to convert Chinese characters and numbers to Arabic numerals. I checked on the Internet and found that all Arabic numerals are converted into Chinese characters, I had to write it myself. After studying the algorithm , I finally completed the function. The principle is also very simple: cyclically input each bit of the string to determine whether it is a unit or a number. If it is a unit, it is saved first. If it is a number, it is multiplied by the previous unit and then saved to the result, if you do not understand the result, you can see the Code comment.
/// <Summary> /// convert the number /// </Summary> protected static long chartonumber (char c) {Switch (c) {Case '1': return 1; case '2': return 2; Case '3': return 3; Case '4': return 4; Case '5': return 5; Case '6': return 6; case '7': Return 7; Case '8': Return 8; Case '9': Return 9; Case '0': Return 0; default: Return-1 ;}} /// <summary> /// conversion unit // </Summary> protected static long chartounit (char c) {Switch (c) {Case '10': return 10; case '100': return 100; Case '100': Return 1000; Case '100': Return 10000; Case '66': Return 100000000; default: return 1 ;}} /// <summary> // convert Chinese numbers to Arabic numerals // </Summary> // <Param name = "cnum"> Chinese numerals </param>/ // <returns> long integer Arabic numerals </returns> Public static long parsecntoint (string cnum) {cnum = RegEx. replace (cnum, "\ s +", ""); long firstunit = 1; // Level 1 unit long secondunit = 1; // Level 2 unit long tmpunit = 1; // temporary Unit variable long result = 0; // result for (INT I = cnum. length-1; I>-1; -- I) // process {tmpunit = chartounit (cnum [I]) in sequence from low to high. // retrieve the unit of this bit if (tmpunit> firstunit) // If You Want To determine whether this bit is a number or a unit {firstunit = tmpunit; // If yes, the value is assigned, for the next cycle, use secondunit = 1; if (I = 0) // process {result + = firstunit * secondunit;} starting with "10", "11 ;} continue; // end this loop} else if (tmpunit> secondunit) {secondunit = tmpunit; continue;} result + = firstunit * secondunit * chartonumber (cnum [I]); // if it is a number, multiply it with the Unit and save it to the result} return result ;}
the result of executing parsecntoint ("one thousand two hundred and thirty-five") is 1235