我是这个论坛的新手,我正在寻求一些帮助,非常感谢任何帮助!我在编程基础1级课程中遇到了这个任务,在这一点上我很绝望,因为我已经被困了几个小时。谢谢。
以下是提示: 许多网站要求提供电话号码。问题是有这么多 表示电话号码的不同方式。例子包括817-555-1234, 817 555 1234(c)和(817)555-1234 x23。编写一个输入的C ++程序 包含任何格式的电话号码的字符串,并以标准格式输出 格式。对于此分配,标准格式为(817)555-1234。 你的c ++程序应该: 1.输入包含数字的字符串 2.仅将输入字符串中的数字复制到另一个字符串中 3.如果输入字符串不包含10,则发出错误消息 数字 4.以标准格式输出电话号码
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <cctype>
using namespace std;
const int NUM_LENGTH = 10;
string ReadAndValidateUserNumber(string userNumber);
int main()
{
string userNumber;
ReadAndValidateUserNumber(userNumber);
system("PAUSE");
return 0;
}
string ReadAndValidateUserNumber(string userNumber)
{
bool check = false;
while (!check)
{
check = true;
cout << "Please enter a Number: ";
cin >> userNumber;
if (userNumber.length() != NUM_LENGTH)
cout << "The phone number may contain 10 digits only. \n";
else
{
userNumber.insert(0, "(");
userNumber.insert(4, ")");
userNumber.insert(8, "-");
for (int i = 0; i < userNumber.length(); i++)
{
if (isdigit(userNumber[i]))
{
userNumber = NUM_LENGTH;
}
}
}
if (!check)
{
cout << "Invalid Entry! Please try again." << endl;
}
}
return userNumber;
}
答案 0 :(得分:0)
代码处于可怕的状态。冷静下来,专注。除了你所写的内容,还有很多问题。我建议您将工作代码带到任何代码审查站点。
您检查错误,以及检查错误后您正在做的事情。
userNumber = NUM_LENGTH;
这会将NUM_LENGTH
截断为char,因此userNumber
内部会有一些奇怪的内容。
这是正确的检查:
if (!isdigit(userNumber[i]))
{
std::cout << "input should be only numbers\n";
return; //function should return void
}
^^这是你应该做的,如果你想打破非数字输入,如果你想跳过非数字,你可以使用std::copy_if
到另一个字符串,或调整上面的东西来做您。如果要删除非数字内容,也可以使用std::remove_if
。
std::string fetched_input;
std::copy_if(userNumber.begin(), userNumber.end(), fetched_input.begin(), std::isdigit);
^^这将只为数字字符串提供字符串。
另外,您没有在正确的地方进行检查。再考虑一下。
答案 1 :(得分:0)
您似乎有逻辑错误。
bool check = false;
while (!check)
{
check = true;
....
if (!check)
{
cout << "Invalid Entry! Please try again." << endl;
}
}
你注意检查再也不会变错。因此,底部if语句将永远不会执行,并且循环将永远不会迭代多次,因为检查始终为真。你可能想要
check = true
条件是输入正确的格式。