使用类 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# 将数字转换为单词的主要内容,如果未能解决你的问题,请参考以下文章

切换语句将单词转换为数字? C ++

在 PDF 表单中使用 JavaScript 将数字转换为单词

读取数字并转换为单词

C#,字符串“Number”转换为数值等于多少?为啥用Convert。ToDouble()无法转换???

有没有办法将数字单词转换为整数?

编写代码将给定的数字转换为单词(例如 1234 作为输入应该输出 1234)