题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1732
1732: 短信中提取号码
时间限制: 1 Sec 内存限制: 64 MB题目描述
手机短信已经成为了我们学习、工作和生活中信息交流的一种常用方式。但是我们经常会碰到这样的情形,想对对方发短信或者打电话的时候,记不起来或者不知道电话号码,这个时候,通常这个时候,我们会向自己熟悉的人求助,请他查到对方的号码后,再将对方的号码发送短信息告诉你。收到短信后,打开短信就可看到你想联系的人的号码,有了这个号码就可以别人联系了。很多手机都具有从短信中提取号码的功能,这样就省得你必须记下来才能继续下一步的打电话或发短信的操作,而是,直接根据提取出来的号码进行下一步操作。你也可以编程做到这一点!
输入
第一行有个整数n(1≤n≤1000)表示测试用例的个数。其后的每一行中有一条短信,每一条短信中只包含字母、数字、空格、标点符号,没有回车换行符,短信的长度不超过400个英文字符。
输出
将每条短信中的电话号码提取出来。每个号码占一行。如果该短信中没有电话号码,请输出“no phone numbers!” 每个测试用例的输出之间用一个空行隔开。
样例输入
2
Mr Zhang's home phone is 073112345678, and his office phone is 87654321, his mobile phone is 13812345678
Sorry, I don't have his any phone numbers!
样例输出
073112345678
87654321
13812345678
no phone numbers!
解析:注意空格符等细节的处理
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int t;
cin >> t;
getchar();
int ok;
while (t--)
{
ok = 1;
string ch;
getline(cin, ch);
int num = ch.size();
if (ch[0] > 47 && ch[0] < 58)
{
ok = 0;
cout << ch[0];
}
for (int i = 1; i < num; i++)
{
if (int(ch[i]) > 47 && int(ch[i]) < 58)
{
ok = 0;
cout << ch[i];
}
if ((int(ch[i - 1]) > 47 && int(ch[i - 1]) < 58) && (ch[i] < 48 || ch[i]>57))
cout << endl;
}
if (ok)
cout << "no phone numbers!" << endl;
if (int(ch[num - 1]) > 47 && int(ch[num - 1]) < 58)
putchar('\n');
putchar('\n');
}
}
/**************************************************************
Problem: 1732
User: 201730685257
Language: C++
Result: 正确
Time:0 ms
Memory:1484 kb
****************************************************************/