我声明了一些变量:
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 << "-";
但我不知道如何将它们与那个变量的短划线分开?
答案 0 :(得分:4)
您可以使用数学计算您的号码的区号和本地交换代码:
6152222222 / 10000
删除最后四位数字,为您提供615222
1000
即可615
;通过1000
取得除法的余数,可以得到222
。请注意,使用int
代表电话号码会限制您存储更多异国电话号码的能力,例如1-800-SOMETHING
。使用封装string
和其他验证的类可能是更好的选择:
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;
}
答案 1 :(得分:4)
电话号码不应存储在整数变量中。您永远不知道电话号码可能需要多长时间,需要哪些特殊字符,是否需要字母字符,前导零等等。
真正的解决方案是至少使用std::string
。
答案 2 :(得分: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
我仍然不推荐这种方法,除非您因遗留原因需要处理存储为整数的电话号码;使用字符串更灵活。
答案 3 :(得分:0)
将这些更改为std :: string类型。然后使用substr操作来获得前三个数字,等等。使用stringstream来获取整数和字符串。
老实说,如果你坚持将这些变量保存在整数中,我建议暂时将它们转换为字符串,并使用字符串运算来计算值xxx-xxxx
,因为如果你使用{编写自己的代码{1}}和/
,您实际上是在%
和<<
操作中复制了您所做的工作。
另外,bee-tee-dubs,这个数字实际上并不适合32位有符号或无符号的int,我认为这是使用错误数据类型的另一个症状。
编辑C ++调味字符串和字符串操作而不是C调味它,因为我出于某种原因在C中思考。
答案 4 :(得分:-1)
只需将输入分为三个不同的数字:
end = 6152222222 % 10000
middle = 6152222222 / 10000
areaCode = middle / 1000
middle = middle % 10000