C++ 在C+中将字母转换为电话号码中的数字+;
我整天都在盯着这个,我对这个代码感到很难理解。我需要这个程序将一串字母(如Call Cash)转换成7位数的电话号码。我得到两种结果中的任何一种。要么程序根本不输出任何数字,要么陷入无限循环。如蒙协助,将不胜感激C++ 在C+中将字母转换为电话号码中的数字+;,c++,while-loop,C++,While Loop,我整天都在盯着这个,我对这个代码感到很难理解。我需要这个程序将一串字母(如Call Cash)转换成7位数的电话号码。我得到两种结果中的任何一种。要么程序根本不输出任何数字,要么陷入无限循环。如蒙协助,将不胜感激 // Program to convert letters to numbers in a phone number. //Header file #include <iostream> #include <iomanip> using namespace
// 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;
}
//将电话号码中的字母转换为数字的程序。
//头文件
#包括
#包括
使用名称空间std;
int main()
{
//声明变量
字符输入;
字符;
整数;
整数计数器;
计数器=0;
//节目
你的while后面可以有一个分号吗(counter你的while后面可以有一个分号(counter我注意到的第一件事是,在内部while循环中,你可以在每个循环中输入变量'number',但是你从来没有给它赋值。接下来,你在内部循环的开头有一个分号。你也从来没有递增'counter',并将输入的数字存储在单个字符而不是字符串中
至于观察到的行为,无限循环将来自从不递增的计数器,导致一个从不停止的循环。打印任何内容都不会来自从不为“number”赋值
我想你的意思是让开关条件为“number”赋值,而不是仅仅打印它。因此cout应该在开关之后,以避免未初始化的值
编辑:哦,一定要使用循环来遍历字符串
以下是您需要做的工作的总体思路:
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 << '-';
}
}
字符串输入;
cin>>输入;
int length=strlen(输入)
for(int i=0;i 如果((letters>='A'&&letters='A'&&letters我注意到的第一件事是,在内部while循环中,你可以在每个循环中输入变量'number',但你从来没有给它赋值。接下来,你在内部循环的开头有一个分号。你也从来没有递增'counter',并将输入的数字存储在一个字符中,而不是str我很生气
至于观察到的行为,无限循环将来自从不递增的计数器,导致一个从不停止的循环。打印任何内容都不会来自从不为“number”赋值
我想你的意思是让开关条件为“number”赋值,而不是仅仅打印它。因此cout应该在开关之后,以避免未初始化的值
编辑:哦,一定要使用循环来遍历字符串
以下是您需要做的工作的总体思路:
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 << '-';
}
}
字符串输入;
cin>>输入;
int length=strlen(输入)
for(int i=0;i if((字母>='A'&&letters='A'&&letters将'letters'声明为字符串而不是单个字符
然后逐个字符地检查字符串并将其转换为字符串,将“字母”声明为字符串而不是单个字符
然后逐个字符地检查字符串,并将它们转换为您所拥有的
(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')
你在哪里
(letters >= 'A' && letters <= 'Z') || (letters >= 'a' && letters <= 'z')
我已经用你的建议更新了代码,现在遇到了一个稍微不同的问题。你比教授的帮助多得难以置信。我建议你使用toupper(或tolower)转换“字母”…这样,您就可以将切换案例减少一半…使其更具可读性。我之前的评论是@hbomb1013。我已经用您的建议更新了代码,现在遇到了一个稍微不同的问题。您比教授的帮助大得多。我建议您使用toupper(或tolower)转换“字母”…这样,您可以将开关案例减少一半…使其更具可读性。我之前的评论是针对@HBomb1013的