我写了一些代码,必须在名单列表中找到情侣。
一对夫妇总是拥有相同的确切前缀,而男孩则有后缀
"ka"
而女孩的后缀为"ki"
。例如:“bipinka”和“bipinki”是一对。
在这个问题中,我们获得了
N
- 名字的数量 - 接下来 下一行是由空格分隔的字符串列表。
我的逻辑是我将检查每个名字的最后两个字母。如果是"ka"
,我会在删除最后两个字母后将其添加到ka
向量,同样为"ki"
添加。"bipinka"
。然后我只是进行相等检查,如果相等,则从向量中删除它们,因为3 "bipinki"
s不能共享1 #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;
}
作为其配偶。
我的代码如下:
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
}
}
问题在于这一部分:
6
bipinki bipinka bipinka bipinka betiki betika
如果给出的输入是:
cout
我的bipinki bipinka bipinka bipinka betiki
函数仅输出:
Run Time Error - Out of Range.
然后代码遇到 <div class="select-a-game ">
<ul class="select-a-game-name text-center">
<li class="sagn-dark-blue">S</li>
<li class="sagn-dark-grey">E</li>
<li class="sagn-orange">L</li>
<li class="sagn-red">E</li>
<li class="sagn-grey">C</li>
<li class="sagn-dark-blue">T</li>
<li class="sagn-black">A</li>
<li class="sagn-dark-grey">G</li>
<li class="sagn-dark-blue">A</li>
<li class="sagn-grey">M</li>
<li class="sagn-red">E</li>
</ul>
</div>
。我正在使用在线IDE,所以这是我看到的错误:
答案 0 :(得分:5)
你的问题是你正在从数组 WHILE 中删除它。
由于您无法在此在线IDE上进行调试(我建议您下载VS Community 2015)。如果您有一支笔和一张纸,请将值写下来并迭代它们,然后在中途擦除一个元素。
将会发生什么?你的循环将超出范围。这是因为你的循环范围是0 -> 5
,而在循环期间,一个(或多个)元素从数组中删除。现在,您的数组为0 -> 4
,但您的循环将继续到达-> 5
..惊喜:
运行时错误 - 超出范围。