我有
的向量strings.vector input;
bob
sam
bob
sammom
aardvark
money
aardvark
wanted
我需要删除重复项,但向量的每个部分都对应于下一个位置。他们是成对的。
离。 bob 对应于其定义,即 sam 。
我需要保留第一个实例,所以保持 bob 和 sam ,但删除第二个 bob 实例,所以删除 bob 和 sammon 。只需保留该对的第一个实例。
如果 sam 和 sammon 不匹配,重要的是该对的第一部分。
矢量已按字母顺序排列。我无法使用算法库。
答案 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--;
}
}