Extract Numbers
来源:互联网 发布:阿里云实例快照是什么 编辑:程序博客网 时间:2024/05/29 19:01
Extract Numbers
You are given string s. Let's call word any largest sequence of consecutive symbols without symbols ',' (comma) and ';' (semicolon). For example, there are four words in string "aba,123;1a;0": "aba", "123", "1a", "0". A word can be empty: for example, the string s=";;" contains three empty words separated by ';'.You should find all words in the given string that are nonnegative INTEGER numbers without leading zeroes and build by them new string a. String a should contain all words that are numbers separating them by ',' (the order of numbers should remain the same as in the string s). By all other words you should build string b in the same way (the order of numbers should remain the same as in the string s).Here strings "101", "0" are INTEGER numbers, but "01" and "1.0" are not.For example, for the string aba,123;1a;0 the string a would be equal to "123,0" and string b would be equal to "aba,1a".
Input
The only line of input contains the string s (1 ≤ |s| ≤ 105). The string contains only symbols '.' (ASCII 46), ',' (ASCII 44), ';' (ASCII 59), digits, lowercase and uppercase latin letters.
Output
Print the string a to the first line and string b to the second line. Each string should be surrounded by quotes (ASCII 34).If there are no words that are numbers print dash (ASCII 45) on the first line. If all words are numbers print dash on the second line.
Example
Inputaba,123;1a;0Output"123,0""aba,1a"Input1;;01,a0,Output"1"",01,a0,"Input1Output"1"-InputaOutput-"a"
Note
In the second example the string s contains five words: "1", "", "01", "a0", "".
题意:
将以逗号、分号为分隔符的字符串中包含的正整数和单词提取出来,分两行输出。具体规则为:包含小数点的子串、带有字母的子串、带有前导零的子串、两个分隔符之间的空子串都记为单词,其余的记为整数。若不存在单词,或者不存在整数,就在对应的那行输出一个横线。
思路:
这是一道模拟题,如题意所说的那样来实现功能就行。值得注意的是第一个子串就是空串,以及最后一个子串是空串的情况,不要漏掉了。
#include <iostream>#include <cstdio>#include <string>#include <cctype>#include <vector>using namespace std;bool isDelimiter(char ch){ return ch == ';' || ch == ',';}int main(){#ifdef TESTfreopen("test.txt", "r", stdin);#endif // TEST string sample; while(cin >> sample){ vector<string> a, b; bool inside = false, isWord = false, extra = false; int len = sample.length(); string temp; for(int i = 0; i < len; i++){ temp += sample[i]; if(!inside && i < len - 1 && !isDelimiter(sample[i+1]) && sample[i] == '0') // leading zero. isWord = true; inside = true; if(!isWord && (sample[i] == '.' || isalpha(sample[i]))) isWord = true; if(sample[i] == ';' || sample[i] == ',' || i == len-1){ if(isDelimiter(sample[i])) if(i < len-1) temp.erase(temp.end()-1); else{ temp.erase(temp.end()-1); extra = true; } inside = false; if(isWord || temp.empty()){ isWord = false; b.push_back(temp); } else a.push_back(temp); if(extra) b.push_back(""); temp.clear(); } } if(a.size()){ cout << "\""; for(int i = 0; i < a.size(); i++) cout << a[i] << ",\""[i==a.size()-1]; cout << endl; } else cout << "-" << endl; if(b.size()){ cout << "\""; for(int i = 0; i < b.size(); i++) cout << b[i] << ",\""[i==b.size()-1]; cout << endl; } else cout << "-" << endl; } return 0;}
阅读全文
0 0
- Extract Numbers
- codeforces A.Extract Numbers
- Codeforces 600A Extract Numbers 【模拟】
- CodeForces 600A - Extract Numbers (模拟题)
- Educational Codeforces Round 2 A. Extract Numbers
- codeforces 600A Extract Numbers 模拟
- codeforces_600A. Extract Numbers(字符串处理)
- Extract
- Extract
- EXTRACT
- extract
- extract
- Extract
- extract
- extract
- Educational Codeforces Round 2 A. Extract Numbers(模拟)
- codeforces Educational Codeforces Round 2 A. Extract Numbers
- Codeforces Educational Codeforces Round 2 A. Extract Numbers
- git常用命令
- springmvc自定义异常处理器
- 杂项
- HDU:4004 The Frog's Games<二分>
- 彩色图像和灰色图像的区别
- Extract Numbers
- 【bzoj1057】[ZJOI2007]棋盘制作
- Processes and Application Lifecycle
- java中package的浅解
- 奋斗群群赛9总结与心得
- Spark调优高级篇:数据倾斜调优
- 华为机试_字符串数字反转逆序
- java集合
- 【CUGBACM15级BC第36场 B】hdu 5199 Gunner