Solution -「CF 600A」Extract Numbers

没啥好说的,直接上模拟。

首先,我们找到第一个分隔的标识符,然后用 std::s.substr 提取所需要的 string 串,判断是否是整数;再把剩下的串提取出来,重复上述操作即可。注意判断整数时要注意前导零和单个 0 的情况。

#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
#include<vector>
#define pii pair<int,int>
#define mp make_pair
#define ll long long
using namespace std;
string my,tmp;
int it;
vector<string> v1,v2;
bool is_number(string s) {
	if(!s.size()||s[0]=='0'&&s.size()>1) return 0;
	for(int i=0;i<s.size();i++) {
		if(s[i]<'0'||s[i]>'9') return 0;
	}
	return 1;
}
void output(vector<string> v1) {
	if(!v1.size()) cout<<'-'<<endl;
	else {
		cout<<"\""<<v1[0];
		for(int i=1;i<v1.size();i++) {
			cout<<','<<v1[i];
		}
		cout<<"\""<<endl;
	}
} 
signed main() {
//	freopen("data.in","r",stdin);
    cin>>my;
    while(1) {
    	int pos=-1;
    	for(int i=0;i<my.size();i++) {
    		if(my[i]==','||my[i]==';') {
    			pos=i;
    			break;
			}
		}
		if(pos==-1) {
			if(is_number(my)) v1.push_back(my);
			else v2.push_back(my); 
			break;
		}
		tmp=my.substr(0,pos);
		if(is_number(tmp)) v1.push_back(tmp);
		else v2.push_back(tmp); 
		my=my.substr(pos+1);
	}
	
	output(v1),output(v2);
}
上一篇:java-从XML节点提取度量


下一篇:extract method(提炼函数)