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
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;
}