用c ++格式化电话号码

时间:2011-10-16 18:29:47

标签: 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 << ")";
    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;
}

请协助

6 个答案:

答案 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”(我认为)。这不是你想要的。至少,你必须扔掉所有非数字字符。