编辑:谢谢你帮助我.我的问题再次得到了支持.如果我的问题措辞严厉,我很抱歉.我尽量让它变得易于理解.再次感谢.
我写了一些代码,必须在名单列表中找到情侣.
一对夫妇总是有相同的确切前缀,男孩有后缀,
"ka"而女孩有后缀"ki".例如:"bipinka"和"bipinki"是一对.
在这个问题中,我们给出了
N- 名称的数量 - 在下一行后面跟一个由空格分隔的字符串列表.
我的逻辑是我将检查每个名字的最后两个字母.如果是"ka",我ka删除最后两个字母后将其添加到向量中,同样为"ki".然后我只是做一个相等检查,如果相等,将它们从向量中删除,因为3 "bipinka"s不能共享1 "bipinki"作为他们的配偶.
我的代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#define sd(n) scanf("%d", &n)
#define slld(n) scanf("%lld", &n)
#define slf(n) scanf("%lf", &n)
#define pd(n) printf("%d\n", n)
#define plld(n) printf("%lld\n", n)
#define plf(n) printf("%lf\n", n)
using namespace std;
int main() {
int N, i, j;
string names[1001];
vector<string> ka, ki;
sd(N);
for(i=0;i<N;i++)
{
cin >> names[i];
cout << names[i] << " "; //Entered this to check for error.
string lastTwo = names[i].substr(names[i].size()-2);
string name = names[i].substr(0, names[i].size()-2);
if (lastTwo == "ka")
{
ka.push_back(name);
}
else if (lastTwo == "ki")
{
ki.push_back(name);
}
}
int ctr = 0;
for(i=0; i<ka.size();i++)
{
for(j=0;j<ki.size(); j++)
{
if(ka[i] == ki[j])
{
ka.erase(ka.begin() + i - 1);
ki.erase(ki.begin() + j - 1);
ctr++;
}
}
}
cout << ctr<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题在于这一部分:
for(i=0;i<N;i++)
{
cin >> names[i];
cout << names[i]; //Entered this to check for error.
string lastTwo = names[i].substr(names[i].size()-2); //last two letters of name
string name = names[i].substr(0, names[i].size()-2); //name without last two letters
if (lastTwo == "ka")
{
ka.push_back(name); //Pushing in ka vector
}
else if (lastTwo == "ki")
{
ki.push_back(name); //Pushing in ki vector
}
}
Run Code Online (Sandbox Code Playgroud)
如果给出的输入是:
6
bipinki bipinka bipinka bipinka betiki betika
Run Code Online (Sandbox Code Playgroud)
我的cout功能只输出:
bipinki bipinka bipinka bipinka betiki
Run Code Online (Sandbox Code Playgroud)
然后代码遇到了Run Time Error - Out of Range..我正在使用在线IDE,所以这是我看到的错误:

你的问题是,你从数组删除WHILE你迭代在同一阵列.
由于您无法在此在线IDE上进行调试(我建议您下载VS Community 2015).如果您有一支笔和一张纸,请将值写下来并迭代它们,然后在中途擦除一个元素.
会发生什么事?你的循环将超出范围.这将发生,因为你的循环范围是让我们说的0 -> 5,并且在循环期间,一个(或多个)元素从你的数组中删除.现在,你的数组是,0 -> 4但你的循环将倾向于继续到达-> 5..惊喜:
运行时错误 - 超出范围.