C ++电话号码计划

时间:2016-12-14 00:08:14

标签: c++ c++11 visual-c++

我是这个论坛的新手,我正在寻求一些帮助,非常感谢任何帮助!我在编程基础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;
}

2 个答案:

答案 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 

条件是输入正确的格式。