У меня есть вектор

strings.vector input;

bob 
sam
bob 
sammom
aardvark    
money
aardvark    
wanted

Мне нужно удалить дубликаты, но каждая часть вектора соответствует следующему местоположению. Они пары.

Бывший. bob соответствует своему определению, то есть sam .

Мне нужно сохранить первый экземпляр, поэтому оставьте bob и sam , но удалите второй экземпляр bob , поэтому удалите bob < / strong> и sammon . Только первый экземпляр пары нужно сохранить.

Не имеет значения, совпадают ли sam и sammon , все, что имеет значение, - это первая часть пары.

Вектор уже находится в алфавитном порядке. Я не могу использовать библиотеку алгоритмов.

0
user3430828 19 Мар 2014 в 01:47

2 ответа

Лучший ответ

Что-то вроде этого?

#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
ethvlad 19 Мар 2014 в 00:53

Это удалит дубликаты, даже если их несколько подряд, как это

Еще раз обратите внимание, что это для пар

И сохраняется только первый экземпляр. Допустим, векторный ввод; имеет следующие

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--;
        }
        }
0
user3430828 19 Мар 2014 в 06:40