c# Alpha Telephone Number Translator

前端 未结 5 1705
忘掉有多难
忘掉有多难 2021-01-28 01:35

I have a homework assignment where the program will accept any phone number in the format similar to 555-GET-FOOD. The task is to map the alphabetic letters to numbers and tran

5条回答
  •  青春惊慌失措
    2021-01-28 01:55

    Here are some options for simple logic to process phone numbers as described. Note that while a novel approach, using an Enum to map letters to integer values somewhat complicates the process more than it needed to be.

    Even though other methods exist for specifically mapping alpha-numeric phone numbers (think Regex) if you do ever need to iterate or process using Enum Names and Values then I hope you find these algorithms useful.

    A dictionary would have been far simpler as a mapping construct to process from.

    Regex where the LetterNumber mapping is defined in the expression would have been superior again.

    /// 
    /// Iterates through the characters in a phone number converting letters to digits.
    /// 
    /// Uses StringBuilder to build the output iteratively, this method does not attempt to validate the number passed in
    /// 
    /// Phone number to parse
    /// Phone number output where letters have been parsed into their digit values
    private string ParsePhoneNumber_StringBuilder(string str)
    {
        StringBuilder output = new StringBuilder();
        foreach (char ch in str.ToCharArray())
        {
            // Convert each letter to it's numeric value as defined in the LetterNumber enum
            // Dashes are not letters so they will get passed through
            if (char.IsLetter(ch))
            {
                if (Enum.IsDefined(typeof(LetterNumber), ch.ToString()))
                {
                    LetterNumber letterNumber = (LetterNumber)Enum.Parse(typeof(LetterNumber), ch.ToString(), true);
                    output.Append((int)letterNumber);
                }
            }
            else
                output.Append(ch);
        }
        return output.ToString();
    }
    
    /// 
    /// Uses Linq to parse the characters in a phone number converting letters to digits.
    /// 
    /// This method does not attempt to validate the number passed in
    /// 
    /// Phone number to parse
    /// Phone number output where letters have been parsed into their digit values
    private string ParsePhoneNumber_Linq(string str)
    {
        return String.Join("", str.Select(c => char.IsLetter(c) ? ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), c.ToString(), true))).ToString() : c.ToString()));
    }
    
    /// 
    /// Iterates through the LetterNumber values and replaces values found in the passed in phone number.
    /// 
    /// Iterates through Enum Names and applied String.Replace
    /// 
    /// Phone number to parse
    /// Phone number output where letters have been parsed into their digit values
    private string ParsePhoneNumber_Replacement(string str)
    {
        str = str.ToUpper(); // we will compare all letters in upper case
        foreach (string letter in Enum.GetNames(typeof(LetterNumber)))
            str = str.Replace(letter.ToUpper(), ((int)((LetterNumber)Enum.Parse(typeof(LetterNumber), letter))).ToString());
        return str;
    }
    

提交回复
热议问题