1

我声明了一些变量:

int area_code;
int telephone_number;

当我从用户那里得到输入时:

cout << "Enter the area code";
cin >> area_code;
cout << "Enter your local telephone number";
cin >> telephone_number;

现在当我想显示它们时,如果他们的电话号码是 6152222222,它应该显示为:

615-222-2222

对于第一部分,我可以这样做:

cout << area_code << "-";

但我不知道如何将它们与那个变量的破折号分开?

4

5 回答 5

4

您可以使用数学计算您的号码的区号和本地交换代码:

  • 6152222222 / 10000去掉最后四位数字,给你615222
  • 进一步除以1000给你615;把除法的其余部分1000给你222

请注意,使用int表示电话号码会限制您存储一些更奇特的电话号码的能力,例如1-800-SOMETHING. 使用封装 astring并进行额外验证的类可能被证明是更好的选择:

class phone_number {
string phone;
public:
    phone_number(const string& p) {
        // validate p...
        if (p.size() != 10) {
            // Do something violent here...
            cerr << "The phone number is incorrect." << endl;
        }
        // Validate more things about the number before the assignment...
        phone = p;
    }
    friend ostream& operator<<(ostream &os, const phone_number& p);
};

ostream& operator<<(ostream &os, const phone_number& pn) {
    const string &p(pn.phone);
    os << "(" << p.substr(0, 3) << ")" << p.substr(3, 3) << "-" << p.substr(6);
    return os;
}

int main() {
    phone_number p = phone_number("6152784567");
    cout << p << endl;
    return 0;
}

这会在 ideone 上产生预期的输出

于 2012-08-06T15:52:36.087 回答
4

电话号码不应存储在整数变量中。你永远不知道一个电话号码可能有多长,需要哪些特殊字符,是否需要字母字符,前导零等等。

真正的解决方案是至少使用std::string.

于 2012-08-06T15:55:29.757 回答
2

您可以使用以下方法执行此操作std::numpunct

#include <iostream>
#include <locale>

struct telephone: std::numpunct<char> {
    char do_thousands_sep() const { return '-'; }
    std::string do_grouping() const { return "\04\03"; }
};

int main() {
    std::cout.imbue(std::locale(std::cout.getloc(), new telephone));
    std::cout << 6152222222ll;
}

输出:

615-222-2222

我仍然不推荐这种方法,除非您出于遗留原因必须处理以整数形式存储的电话号码;使用字符串更灵活。

于 2012-08-06T16:15:50.677 回答
0

将这些更改为 std::string 类型。然后使用 substr 操作来获取前三位,等等。使用 stringstream 在整数和字符串之间获取。

而且,老实说,如果您坚持将这些变量保存在整数中,我建议您暂时将它们转换为字符串,并使用字符串操作来计算 value ,因为如果您使用andxxx-xxxx编写自己的代码,您实际上是在重复工作这已经在和操作中对您进行了。/%<<>>

此外,bee-tee-dubs,该数字实际上不适合 32 位有符号或无符号整数,我认为这是使用错误数据类型的另一个症状。

编辑为 C++ 风格的字符串和字符串操作,而不是 C 风格,因为我出于某种原因在考虑 C 语言。

于 2012-08-06T15:52:17.097 回答
-1

只需将输入分成三个不同的数字:

end = 6152222222 % 10000
middle = 6152222222 / 10000
areaCode = middle / 1000
middle = middle % 10000
于 2012-08-06T15:56:11.023 回答