请教大家关于循序处理输入的一个问题
我在做华为的以下编程题时:
自测一个案例的话都能通过,但是提交时,输出多了一部分,应该是循环输入的问题,我应该怎么修改呢?我的代码如下:
但是提交时:
#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; }