使用类 C# 将数字转换为单词
Posted
技术标签:
【中文标题】使用类 C# 将数字转换为单词【英文标题】:Converting Numbers to Words Using Classes C# 【发布时间】:2019-03-27 07:38:30 【问题描述】:我知道这是一个以前被问过的问题,我已经解决了很多问题,但我真的需要一些帮助。
我正在尝试为家庭作业创建一个控制台程序,该程序接受用户输入的数字,然后将该数字转换为对应的单词。目前,我可以从输入创建一个数组,然后生成一个索引。我还可以返回 char 值以及该值的索引。即如果输入为 72,那么它将返回 7 = 0 和 2 = 1。
现在我基本上必须创建一个将获取该信息的类,然后运行代码以返回单词,但问题是,我根本无法理解类。我已经阅读了所有的笔记,我已经完成了额外的阅读并观看了视频,但我根本无法理解。问我的老师让我一无所获。
class Program
static void Main(string[] args)
Console.WriteLine("This program will convert numbers that you enter into their spoken English counterpart.\nExample: 100 = One Hundred.\n\nPlease enter your desired number to convert: ");
string getinput = (Console.ReadLine());
char[] getarray = getinput.ToCharArray();
for (int getindex = 0; getindex < getarray.Length; getindex++)
char getchar = getarray[getindex];
Console.WriteLine("getchar: " + getchar);
//Console.WriteLine("getarray: " + getarray);
Console.WriteLine("getindex: " + getindex);
//int convertinput = Convert.ToInt32(getinput);
class ToText
//attributes
private string[] ones = "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" ; //each value is part of the array
private string[] teens = "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" ; //array 0 in this set = "eleven" or tens[0] = "eleven"
private string[] tens = "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" ;
private string[] moreThan99 = "hundred", "thousand", "million", "billion", "trillion" ;
//methods
public string ConvertToText()
//constructors
public ToText()
//destructors
~ToText()
我正在尝试了解如何将我创建的信息推送到班级然后再返回。
如果有人能帮助我理解我在做什么,那将不胜感激。
谢谢。
【问题讨论】:
“我根本无法理解课程”——在什么方面? 使用字典,所有的问题都会迎刃而解....,以数字为键,以单词为值,您只需将索引返回为单词。 在您的应用程序的上下文中,我认为您可能想要一个没有构造函数/析构函数的static class。然后你可以打电话给ToText.ConvertToText(value);
(假设你改变了 ConvertToText 来接受一个数字值)。
将输入转换为char
数组是您的想法,还是任务的一部分?您是否“允许”使用Convert.ToInt32(getinput)
?你知道modulo or remainder operator吗? -- 如果您对一项任务感到不知所措,通常最好将其分解为更小的部分并尝试单独解决它们。例如:对于仅介于 0 和 9 之间的数字,您将如何解决此任务?
字典肯定有自己的位置。但是对于这项任务,您可能不想“硬编码”每个可能的值。即使对于“仅”非负的 int
值,您也必须明确写下超过 20 亿个条目(假设有足够的内存)。你可能想找到一种更聪明的方法来做到这一点。 ^_^
【参考方案1】:
我根本无法理解课程
通过阅读您的示例,我推断问题是
“我已经声明了一个类和一些方法。我该如何称呼它?”
令人惊讶的是,在 SO(我能找到)上没有其他答案,所以我想有人必须回答。
一旦你完成了你的类的声明(你仍然需要在它的方法中加入一些逻辑,但我想你知道这一点)你需要弄清楚如何调用它。由于您的程序非常小,您可能希望通过 Main
方法调用它。
类只是一个类型。像任何类型一样,为了用它做任何有趣的事情,你必须创建一个 instance 并将它分配给一个变量。在此示例中,我将变量命名为 instance
,但您应该使用描述性名称。
var instance = new ToText();
一旦你有了实例,你就可以调用它的方法了。
var output = instance.ConvertToText(input);
在上下文中它看起来像这样:
static public void Main(string[] args)
//Your other code might go here
var instance = new ToText();
var output = instance.ConvertToText(input);
//and here
这就是你如何创建一个类的实例(也就是一个对象)并调用它的方法。
注意:您的代码中还有很多其他问题,但我只是想回答这个问题。而且您应该知道,有一些方法可以在不实例化实例的情况下使用类(称为“静态”),但这似乎不是您分配的重点。
【讨论】:
+1 表示耐心并给出解释,而不仅仅是链接教程!对 SO 社区的信心恢复了 ;) 非常感谢您花时间向我解释这一点,这让我明白了很多。另外,是的,我知道这是一个非常基本的问题,但我一直在努力弄清楚实际结构以及它与整体的关系,所以也感谢您的耐心等待。【参考方案2】:你可以通过两种方式调用你的类/方法
首先,您可以将您的 convertotext 方法创建为静态的。
public static string ConvertToText(string NumberToConvert)
char[] getarray = NumberToConvert.ToCharArray();
for (int getindex = 0; getindex < getarray.Length; getindex++)
char getchar = getarray[getindex];
Console.WriteLine("getchar: " + getchar);
//Console.WriteLine("getarray: " + getarray);
Console.WriteLine("getindex: " + getindex);
//int convertinput = Convert.ToInt32(getinput);
return ""; // return the Converted value
静态意味着您不需要创建 ToText 类的实例,然后在您的 main 方法中您可以这样调用它
static void Main(string[] args)
Console.WriteLine("This program will convert numbers that you enter into their spoken English counterpart.\nExample: 100 = One Hundred.\n\nPlease enter your desired number to convert: ");
// Static method call
string ConvertedValue=ToText.ConvertToText(Console.ReadLine());
Console.WriteLine(ConvertedValue);
或者你可以只创建一个实例方法
public string ConvertToText(string NumberToConvert)
char[] getarray = NumberToConvert.ToCharArray();
for (int getindex = 0; getindex < getarray.Length; getindex++)
char getchar = getarray[getindex];
Console.WriteLine("getchar: " + getchar);
//Console.WriteLine("getarray: " + getarray);
Console.WriteLine("getindex: " + getindex);
//int convertinput = Convert.ToInt32(getinput);
return ""; // return the Converted value
并像下面这样称呼它:
static void Main(string[] args)
Console.WriteLine("This program will convert numbers that you enter into their spoken English counterpart.\nExample: 100 = One Hundred.\n\nPlease enter your desired number to convert: ");
//Need to create an instance/object of ToText. Then call the ConvertToText via ToText Instance/Object
ToText ToText=new ToText();
string ConvertedValue=ToText.ConvertToText(Console.ReadLine());
Console.WriteLine(ConvertedValue);
【讨论】:
啊,好吧,这很有意义。感谢您的帮助! 很高兴我能帮上忙。你应该看看这个关于如何进行转换的答案:***.com/questions/2729752/…【参考方案3】:这是我的尝试。我可以做到 1 - 19。它通过方法将值从主类传递到另一个类。您能否在完成后发布完整的解决方案,因为我现在也在尝试解决这个问题。
class Program
static void Main(string[] args)
//Ask the user to input a number
Console.WriteLine("Please enter a number and this will convert it into the the word version of the number:");
//Inputs from console are in a string format as readline returns string
string UserInput = Console.ReadLine();
//Make an instance of the ConvertNumber class where the method numberConversion lives. I've called the instance numberConversion.
ConvertNumber numberConversion = new ConvertNumber();
//Here I'm saying numberConversion use your method NumberTooText and I'm sending the UserInput from this class along with it.
numberConversion.NumberTooText(UserInput);
class ConvertNumber
//I combined your first two arrays for one to nineteen
private string[] oneToNineteen = "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" ; //each value is part of the array
//Method for number to text
public void NumberTooText(string userinput)
//As I wanted to iterate and use the number for the array index we need to convert the string we got from program cs to int
int number = Int32.Parse(userinput);
//If the number is 19 or less the console will write from the array[userInputNumber]
// In the else statement you can create a method for greater than 19
if (number <= 19)
Console.WriteLine(oneToNineteen[number]);
【讨论】:
看看下面如何将 Number 转换成它的字符串表示。 ***.com/questions/2729752/… 谢谢,我不知道人们是怎么想的。猜猜它需要时间和知识。以上是关于使用类 C# 将数字转换为单词的主要内容,如果未能解决你的问题,请参考以下文章
在 PDF 表单中使用 JavaScript 将数字转换为单词