所以我有一个编码任务要完成,而我在完成它时遇到了麻烦。确切说明如下:
为使电话号码更容易记住,一些公司使用字母显示其电话号码。 例如,使用字母,电话号码438-5626可以显示为GET LOAN。在某些情况下,为了使电话号码有意义,公司可能会使用七个以上的字母。例如,225-5466可以显示为“拨打电话”,它使用八个字母。
编写一个执行以下操作的程序:
- 提示用户输入Y或y开始转换,或退出其他任何输入。
- 提示用户输入以字母表示的电话号码并以数字输出相应的电话号码
- 如果用户输入的字母超过七个,则仅处理前七个字母。
- 在第三位数字后输出–(连字符)。
- 允许用户同时使用大写和小写字母以及单词之间的空格。
- 处理用户想要的电话号码,同时允许他们在每次转换后退出。
我目前已经完成了所有步骤,除了最后一个步骤(类似)。
教师正在寻找单词“ exit”以退出程序。目前,我已将其设置为“%”以结束程序。逻辑上,您会说只是将“%”更改为“ exit”并继续前进,但是这样做时会出现错误。
#include <iostream>
using namespace std;
int main()
{
int counter;
char phoneNumber;
char cont;
// Prompts a user to enter Y or y to begin conversion, or any other input to quit.
cout << "Please enter 'Y' or 'y' to continue, otherwise the program with quit.\n Input: ";
cin >> cont;
if (cont == 'y' || cont == 'Y')
{
// statement(s) will execute if the boolean expression is true
}
else
{
return 0;
// statement(s) will execute if the boolean expression is false
}
cout << "To stop this program enter 'exit'." << endl;
cout << "Enter a phone number in letters only \nNOTE: Must enter 7 or more letters: ";
cin >> phoneNumber;
cout << endl;
phoneNumber = static_cast<char>(toupper(phoneNumber));
while (phoneNumber != '%')
{
cout << "\nTo stop this program enter 'exit'." << endl;
cout << "Enter a phone number in letters only." << endl;
for (counter = 0; phoneNumber != '%' && counter < 7; counter++)
{
cin >> phoneNumber;
if (counter == 3)
cout << "-";
if ((phoneNumber >= 'A' && phoneNumber <= 'Z') ||
(phoneNumber >= 'a' && phoneNumber <= 'z'))
switch (phoneNumber)
{
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;
}
}
while (cin.get() != '\n')
;
}
return 0;
}
我认为这与字符有关,这就是我所能找到的全部。我一直在互联网上寻找答案,但是我空了出来。您提供的任何帮助将不胜感激。
答案 0 :(得分:0)
如果要将phonenumber变量更改为“ exit”,则必须为字符串,而不是字符。
答案 1 :(得分:0)
在C ++中,字符和字符串之间有很大的区别。字符是单个字符,而字符串是一堆字符。对于字符串,一串可以表示0、1个或多个字符。通过使用撇号(对于char)或引号(对于字符串)来区分两者。由于您的程序仅使用char作为输入,因此当您获得的输入超过一个字符时,您的程序将不知道如何处理。您将必须使用字符串来包括必须写“ exit”的情况。
答案 2 :(得分:0)
程序的基本结构应为:
int main() {
std::string line;
while (std::getline(std::cin, line) && line != "exit") {
std::cout << phone_digits(line) << "\n";
}
}
那几乎就这么简单。由于存在关于如何用信号通知输入结束的广泛约定,因此“退出”条件不是严格必需的。在Windows上是Ctrl + Z,而在类似UNIX的系统(Linux,NetBSD,macOS)上是Ctrl + D。
我也不明白您为什么首先输入“ y”才能真正启动程序。这也是不必要的,但是您的老师可能仍然会坚持这样做。
接下来的事情是编写phone_digits
函数并将其放置在main函数的上方。此函数以字符串作为参数,并返回一个字符串。
std::string phone_digits(const std::string &input) {
std::string result;
// TODO: convert letters from input to digits in output
// TODO: insert the hyphen in the result
return result;
}
要以这种形式编写函数,必须阅读std::string
类的文档,以了解如何遍历输入中的所有字符以及如何将字符添加到结果字符串的末尾。