请协助,我正在尝试格式化(111)111-1111
这样的电话号码。我有以下代码,但我想写得更短。
int main(){
string phone_number;
cin >> phone_number;
cout<<"(";
for(int i = 0; i < 3; i++) {
cout << phone_number[i];
}
cout << ")";
for(int i = 3; i < 6; i++) {
cout << phone_number[i];
}
cout << "-";
for(int i = 6; i < 10; i++) {
cout << phone_number[i];
}
cout<<endl;
return 0;
}
请协助
答案 0 :(得分:5)
另一种可能性:
cout << "(" << phone_number.substr(0,3) << ")"
<< phone_number.substr(3,3) << "-" << phone_number.substr(6,4) << endl;
答案 1 :(得分:3)
使用string::insert。但是,由于您将字符串作为输入,为什么不以您需要的格式提供输入。如果你想修改字符串,这就是如何完成任何循环。如果您不想更改原始字符串,请将修改后的内容存储到另一个临时变量。
string phone_number = "123456789";
phone_number = phone_number.insert( 0, "(" ); // Original string is modified
// Rest can be achieved in similar fashion
cout << phone_number << endl;
答案 2 :(得分:1)
for (int i=0; i<10; ++i)
{
if (i == 0) std::cout << '(';
else if (i == 3) std::cout << ')';
else if (i == 6) std::cout << '-';
std::cout << phone_number[i];
}
答案 3 :(得分:1)
将数据更改为格式化可能不太好。
string str(phn);
// Format Phone# 1: void function
printf("(%s)%s-%s",
str.substr(0,3).c_str(),
str.substr(3,3).c_str(),
str.substr(6, 4).c_str());
// Format Phone# 2: returns std::string&
stringstream p;
p << "(" << str.substr(0, 3) << ")"
<< str.substr(3, 3) << "-"
<< str.substr(6, 4);
return p.str();
答案 4 :(得分:0)
忽略为什么你想写这个“更短”的问题......
printf("(%c%c%c)%c%c%c-%c%c%c%c\n", phone_number[0], phone_number[1], phone_number[2],
phone_number[3], phone_number[4], phone_number[5],
phone_number[6], phone_number[7], phone_number[8],
phone_number[9]);
话虽如此 - 您的代码(也不是这个)检查是否存在实际存在的10个数字,或者它们是否是数字。 首先比想要“更短”更重要。
答案 5 :(得分:0)
您的代码太短,不会太长。必须始终检查用户的任何输入的有效性。例如,如果已使用已输入标点符号,那么phone_number
包含“(111)111-1111”该怎么办?然后你的代码将输出“((11) - )11-1-11”(我认为)。这不是你想要的。至少,你必须扔掉所有非数字字符。