C++ 在c+中格式化电话号码+;

C++ 在c+中格式化电话号码+;,c++,C++,请协助,我正在尝试设置电话号码的格式,如(111)111-1111。我有下面的代码,但我想写得更短 int main(){ string phone_number; cin >> phone_number; cout<<"("; for(int i = 0; i < 3; i++) { cout << phone_number[i]; } cout << ")"; f

请协助,我正在尝试设置电话号码的格式,如
(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;
}
intmain(){
字符串电话号码;
cin>>电话号码;

忽略你为什么要写这篇短文的问题

也就是说,你的代码(也不是这个)检查是否有10个数字,或者它们是否是数字。这比想要它“更短”更重要.

使用。但是既然您将字符串作为输入,为什么不以您需要的格式提供输入。无论如何,如果您希望修改字符串,这就是不需要任何循环就可以完成的方式。如果您不希望更改原始字符串,则将修改后的字符串存储到其他临时变量中

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;
string phone_number=“123456789”;
电话号码=电话号码。插入(0)(“”;//修改原始字符串
//休息也可以以类似的方式实现
不能另一种可能性:

cout << "(" << phone_number.substr(0,3) << ")"
     << phone_number.substr(3,3) << "-" << phone_number.substr(6,4) << endl;

cout您的代码太短,而不是太长。必须始终检查用户输入的任何内容的有效性。例如,如果用户已经输入了标点符号,那么
phone_number
包含“(111)111-1111”?那么您的代码将输出“((11)-)11-1-11”(我想)。这不是您想要的。至少,您必须扔掉所有非数字字符。

for(int i=0;i仅将数据更改为格式可能不好

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];
}
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();
stringstr(phn);
//格式化电话#1:无效功能
printf((%s)%s-%s),
str.substr(0,3).c_str(),
str.substr(3,3).c_str(),
str.substr(6,4.c_str());
//格式化电话#2:返回标准::字符串&
细流p;

p在开始尝试编写较短的代码之前,请花点时间正确缩进代码。例如,通常循环体从
}的封闭
缩进一定数量的空格
。大多数读者都无法接受您的代码,除非您开始始终如一地这样做。为什么需要缩短代码?这只适用于电话号码的子集(美国号码)。如果我输入
0049 30 12345678
+49 30 12345678
,会怎么样?这似乎是一个经典的家庭作业问题。如果是这样,我和许多其他人都会非常感激将其标记为这样,以便我们能够提供“适当”的答案(即不向您提供代码,这相当于作弊).Thx-手指有时比大脑快。我试图进入最后一部分,而不是printf语句本身。太好了!我想在数字之间插入一个空格
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();