请教大家关于循序处理输入的一个问题
我在做华为的以下编程题时:
自测一个案例的话都能通过,但是提交时,输出多了一部分,应该是循环输入的问题,我应该怎么修改呢?我的代码如下:
但是提交时:
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
void split(const string &src, vector<int>& dest, const char& delimiter) {
dest.clear();
istringstream iss(src);
string tmp;
while (getline(iss, tmp, delimiter)) {
dest.push_back(stoi(tmp));//记得转化为int
}
}
bool IsSubStr(int text, int pattern) {
string t = to_string(text);
string p = to_string(pattern);
if (t.size() < p.size())
return false;
size_t idx = t.find(p);
if (idx != string::npos) {//查找成功
return true;
}
else
return false;
}
int main()
{
string I;
string R;
while (getline(cin, I)) {
getline(cin, R);
vector<int> Ivec;
vector<int> Rvec;
map<int, vector<int>> records;
//注意,vector的第一个数据为个数
split(I, Ivec, ' ');//提取数据至对应的vector
split(R, Rvec, ' ');
//对Rvec进行排序,sort时,不要对第一个元素进行sort
sort(Rvec.begin() + 1, Rvec.end());
for (size_t i = 1;i < Rvec.size();++i) {//注意跳过第一个数
int pattern = Rvec[i];
int matchCnt = 0;//统计有多少个匹配
//如果有重复的R,则跳过
if (records.find(pattern) != records.end())
continue;
for (size_t j = 1;j < Ivec.size();++j) {
int text = Ivec[j];//主串
if (IsSubStr(text, pattern)) {
++matchCnt;
records[pattern].push_back(j-1);//保存相应下标
}
}
}
//输出:
int sum = 0;
for (auto iter = records.begin();iter != records.end();++iter) {
sum += 2 + (*iter).second.size() * 2;//R[I],对应VECTOR的大小,对应的下标和元素
}
cout << sum << " ";
//map本身就排好序
for (auto iter = records.begin();iter != records.end();++iter) {
cout << iter->first << " " << iter->second.size() << " ";
//遍历容器
for (size_t i = 0;i < iter->second.size();++i) {
cout << iter->second[i] << " " << Ivec[iter->second[i]+1] << " ";
}
}
}
return 0;
}

