用C ++将字母转换为电话号码中的数字

时间:2010-07-11 05:36:05

标签: c++ while-loop

我一整天都在盯着这个,而且我在使用这段代码时遇到了困难。我需要这个程序将一串字母(如Call Cash)转换成7位数的电话号码。我得到两个结果之一。程序根本不输出任何数字,或者卡在无限循环中。非常感谢任何帮助。

// Program to convert letters to numbers in a phone number.

//Header file
#include <iostream>
#include <iomanip>

using namespace std;

int main ()
{
    //Declare variables
char input;
char letters;
int number;
int counter;
counter = 0;


    //Program
cout << "Enter Y/y to convert a telephone number form letters to digits." << endl;
cout << "Enter any other letter to terminate the program." << endl;
cin >> input;
while (input == 'Y' || input == 'y')
{
    cout << "Enter telephone number using letters: ";
    cin >> letters;
    cout << endl;

    cout << "The corresponding phone number is: ";

    while (counter <= 7);
    {
        cout << number;
        if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
        switch (letters)
    {
    case 'A':
    case 'a':
    case 'B':
    case 'b':
    case 'C':
    case 'c':
    cout << "2";
    break;

    case 'D':
    case 'd':
    case 'E':
    case 'e':
    case 'F':
    case 'f':
    cout << "3";
    break;

    case 'G':
    case 'g':
    case 'H':
    case 'h':
    case 'I':
    case 'i':
    cout << "4";
    break;

    case 'J':
    case 'j':
    case 'K':
    case 'k':
    case 'L':
    case 'l':
    cout << "5";
    break;

    case 'M':
    case 'm':
    case 'N':
    case 'n':
    case 'O':
    case 'o':
    cout << "6";
    break;

    case 'P':
    case 'p':
    case 'Q':
    case 'q':
    case 'R':
    case 'r':
    case 'S':
    case 's':
    cout << "7";
    break;

    case 'T':
    case 't':
    case 'U':
    case 'u':
    case 'V':
    case 'v':
    cout << "8";
    break;

    case 'W':
    case 'w':
    case 'X':
    case 'x':
    case 'Y':
    case 'y':
    case 'Z':
    case 'z':
    cout << "9";
    break;

    if (counter == 3)
        cout << "-";
}
    }
}


return 0;
}

编辑:这是我的新代码。我现在遇到的问题是它只返回第一个字母的值,并且它在单独的行上返回每个值。我非常感谢你的帮助:

    //Declare variables
char input;
char letters;
int number;
int i;


    //Program
cout << "Enter Y/y to convert a telephone number form letters to digits." << endl;
cout << "Enter any other letter to terminate the program." << endl;
cin >> input;
while (input == 'Y' || input == 'y')
{
    cout << "Enter telephone number using letters: ";
    cin >> letters;
    cout << endl;

    cout << "The corresponding phone number is: ";

    for(int i = 0; i < 7; i++)
    {
        if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
        switch (letters)
    {
    case 'A':
    case 'a':
    case 'B':
    case 'b':
    case 'C':
    case 'c':
    cout << "2";
    break;

    case 'D':
    case 'd':
    case 'E':
    case 'e':
    case 'F':
    case 'f':
    cout << "3";
    break;

    case 'G':
    case 'g':
    case 'H':
    case 'h':
    case 'I':
    case 'i':
    cout << "4";
    break;

    case 'J':
    case 'j':
    case 'K':
    case 'k':
    case 'L':
    case 'l':
    cout << "5";
    break;

    case 'M':
    case 'm':
    case 'N':
    case 'n':
    case 'O':
    case 'o':
    cout << "6";
    break;

    case 'P':
    case 'p':
    case 'Q':
    case 'q':
    case 'R':
    case 'r':
    case 'S':
    case 's':
    cout << "7";
    break;

    case 'T':
    case 't':
    case 'U':
    case 'u':
    case 'V':
    case 'v':
    cout << "8";
    break;

    case 'W':
    case 'w':
    case 'X':
    case 'x':
    case 'Y':
    case 'y':
    case 'Z':
    case 'z':
    cout << "9";
    break;
    cout << number;
    }

    if (i == 2)
        cout << "-";

    }
    cout << "To process another telephone number, enter Y/y." << endl;
    cout << "Enter any other letter to terminate the program." << endl;
    cin >> input;
}


return 0;

}

4 个答案:

答案 0 :(得分:2)

您的while (counter <= 7)后面有分号。您错开了switch (letters)的右括号,它应该之前 if (counter == 3)。您在while上有一个input循环,但在程序运行时您永远不会更改它。

我得到了所有这些吗?

答案 1 :(得分:2)

你有... ...

(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')

喜欢

isalpha (letters)

答案 2 :(得分:1)

我注意到的第一件事是,在你的内部while循环中,你会在每个循环中输入变量'number',但你永远不会给它赋值。接下来,在内循环的开头有一个分号。您也永远不会增加'计数器'并将输入数字存储在单个字符中而不是字符串中。

对于观察到的行为,无限循环将来自永不递增的计数器,从而产生一个永不停止的循环。不打印任何东西都不会从没有为“数字”赋值。

我认为你打算做的是让开关条件为“数字”赋值而不是仅打印它。因此,cout应该在切换之后避免未初始化的值nastiness。

编辑:哦,请务必使用循环来迭代字符串。

以下是您需要做的一般概念:

string input;
cin >> input;

int length = strlen(input)
for(int i = 0; i < length; i++)
{
    //what happens if this condition fails?
    if ((letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z'))
    {
        switch (letters[i])
        {
            case 'A':
            case 'a':
            case 'B':
            case 'b':
            case 'C':
            case 'c':
            number = 2;
            break;

            <snip>
         }

        cout << number;
    }
    if(i == 2)
    {
        cout << '-';
    }
}

答案 3 :(得分:0)

将'letters'声明为字符串而不是单个char 然后按字符逐个字符串并转换它们