读取字符串向量

时间:2016-07-29 20:49:32

标签: c++ string vector

我写了一些代码,必须在名单列表中找到情侣。

  

一对夫妇总是拥有相同的确切前缀,而男孩则有后缀   "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,所以这是我看到的错误: enter image description here

1 个答案:

答案 0 :(得分:5)

你的问题是你正在从数组 WHILE 中删除它。

由于您无法在此在线IDE上进行调试(我建议您下载VS Community 2015)。如果您有一支笔和一张纸,请将值写下来并迭代它们,然后在中途擦除一个元素。

将会发生什么?你的循环将超出范围。这是因为你的循环范围是0 -> 5,而循环期间,一个(或多个)元素从数组中删除。现在,您的数组为0 -> 4,但您的循环将继续到达-> 5 ..惊喜:

  

运行时错误 - 超出范围。