一.题目
二.思路
①切割输入字符的()括号,并将切割后的字符循环切割为两个部分x,y
②判断x,y是否符合要求,并用list存储符合要求的情况:
1>如果字符长度为1,不能小数点切割,直接放入list并返回,例如:0,1
2>如果以0结尾
不以0开头,符合要求,不能添加小数点,例如:100
开头也为0,不符合要求
3>如果以0开头(不以0结尾),只有一种切割方式,例如:0001->0.001
4>其他情况,循环切割小数点,例如:123->1.23,12.3,123
③将x和y的情况枚举拼接起来则为答案
三.代码实现
#include<vector>
#include<iostream>
using namespace std;
bool ifIsYaoQu(string s) {
//判断最后一个是否以0结尾,则不符合要求
//例如000,并且length>1
//length==1,例如:0是符合要求的
if (s.at(s.length() - 1) == '0' && s.length() > 1) {
return false;
}
return true;
}
vector<string> getChuLiGuo(string s) {
vector<string> List;
//如果第一个字符不为0,最后一个字符为0
//例如:10
//这种数字不能打小数点,直接放入list
if (s.length() > 1 && s.at(s.length() - 1) == '0' && s.at(0) != '0') {
List.push_back(s);
}
else {
//判断是否符合要求
if (ifIsYaoQu(s)) {
//如果只有一个字符,直接放入
if (s.length() == 1) {
List.push_back(s);
}
//如果多个字符,且第一个字符为0
//例如0001
//这种字符只有一个打小数点方法:0.001
else if (s.length() > 1 && s.at(0) == '0') {
string mstr;
mstr.append(s, 0, 1);
mstr.append(".");
mstr.append(s, 1, s.length() - 1);
List.push_back(mstr);
}
//其余情况
else {
for (int j = 1; j <= s.length(); j++) {
//mstr.append(s, 0, j)->mstr 添加 字符s从第0个点切割j个字符后的字符
//例如:mstr.append(1234, 0, 1),mstr=1
// mstr.append(1234, 1, 2),mstr=23
string mstr;
mstr.append(s, 0, j);//小数点前半部分
if (!(j == s.length())) {
mstr.append(".");
mstr.append(s, j, s.length() - 1);//小数点后半部分
}
List.push_back(mstr);
}
}
}
}
return List;
}
vector<string> ambiguousCoordinates(string s) {
vector<string> stringVector;
//去掉括号(123)->123
string str0=s.substr(1, s.length()-2);
//循环切割str0,获得x,y
//123可切割为(x=1,y=23),(x=12,y=3)
for (int i = 1; i < str0.length(); i++) {
string x = str0.substr(0, i);
string y = str0.substr(i, s.length() - 1);
//判断x,y是否符合要求,并获得符合要求的数组
//(x=1,y=23)->xList={1},yList={2.3,23}
//(x=12,y=3)->xList={1.2,12},yList={3}
vector<string> xList= getChuLiGuo(x);
vector<string> yList = getChuLiGuo(y);
//将x,y枚举组合起来
if (xList.size() != 0 && yList.size() != 0) {
string str = "(";
for (int a = 0; a < xList.size(); a++) {
string str1 = str;
str1.append(xList.at(a));
str1.append(",");
for (int b = 0; b < yList.size(); b++) {
string str2 = str1;
str2.append(yList.at(b));
str2.append(")");
stringVector.push_back(str2);
}
}
}
}
return stringVector;
}
int main() {
string s;
cin >> s;
vector<string> str=ambiguousCoordinates(s);
cout << "[";
for (int i = 0; i < str.size(); i++) {
if (i == str.size() - 1) {
cout << str.at(i);
}
else {
cout << str.at(i) << ",";
}
}
cout << "]";
return 0;
}