删除重复的字符串向量,保留第一个实例。无法使用算法

时间:2014-03-18 21:47:45

标签: c++ vector

我有

的向量

strings.vector input;

bob 
sam
bob 
sammom
aardvark    
money
aardvark    
wanted

我需要删除重复项,但向量的每个部分都对应于下一个位置。他们是成对的。

离。 bob 对应于其定义,即 sam

我需要保留第一个实例,所以保持 bob sam ,但删除第二个 bob 实例,所以删除 bob sammon 。只需保留该对的第一个实例。

如果 sam sammon 不匹配,重要的是该对的第一部分。

矢量已按字母顺序排列。我无法使用算法库。

2 个答案:

答案 0 :(得分:1)

这样的东西?

#include <iostream>

using namespace std;

int main()
{
    int stringSize=10, k=2, newlen=0;

    string v[] = {"bob","sam","bob","samelia","bob","sammom","aardvark","money","aardvark","wanted"};

    // erase duplicates
    for (int i=0; i<=stringSize-4; i+=2)
    if (v[i]==v[i+k])
    {
        while (v[i]==v[i+k])
        {
            v[i+k]="";
            v[i+k+1]="";

            k+=2;
        }
        i=k-2;
        k=2;
    }

    // remove blank components
    for (k=0; k<stringSize; k++)
    if (v[k]!="")
    {
        v[newlen]=v[k];
        newlen++;
    }
    stringSize=newlen;

    // show the cleaned vector
    for (int i=0; i<stringSize; i++)
    cout << v[i] << endl;

}

答案 1 :(得分:0)

即使这样的行中有多个

,也会删除重复项

再次注意,这是针对

只保留第一个实例。 让我们说矢量输入;有以下

bob
son
bob
son2
mark
wife1
mark
wife2
mark
wife3

变为

bob
son
mark
wife

这将删除最多6个重复项,并根据需要增加。

由于某种原因,我不得不删除两次空格。

    //vector<string> input; is filled in alphabetical order with duplicates
    int size=input.size();

    //transfer to dynamically created array of strings
    string *strarray;
    strarray = new string[size];
    for(int i=0; i<size; i++){
       strarray[i] = input[i];//Copy the vector to the string
    }

    // erase duplicates
    for (int i=0; i<=size-(size/2); i+=2){
        if (strarray[i]==strarray[i+2])
        {
            strarray[i+2].erase(0,strarray[i+2].size());
            strarray[i+3].erase(0,strarray[i+3].size());
        }
        if (strarray[i]==strarray[i+4])
        {
            strarray[i+4].erase(0,strarray[i+4].size());
            strarray[i+5].erase(0,strarray[i+5].size());
        }
        if (strarray[i]==strarray[i+6])
        {
            strarray[i+6].erase(0,strarray[i+6].size());
            strarray[i+7].erase(0,strarray[i+7].size());
        }
        if (strarray[i]==strarray[i+8])
        {
            strarray[i+8].erase(0,strarray[i+8].size());
            strarray[i+9].erase(0,strarray[i+9].size());
        }
        if (strarray[i]==strarray[i+10])
        {
            strarray[i+10].erase(0,strarray[i+10].size());
            strarray[i+11].erase(0,strarray[i+11].size());
        }
    }

    // remove blank components
        for (int i=0; i<size; i++){
        if (strarray[i]=="")        {
            for (int j=i; j<size-1; j++)
                strarray[j]=strarray[j+1];

            size--;
            i--;
        }
        }