gpt4 book ai didi

c++ - 从结构数组中删除重复的字符串并计算它们

转载 作者:行者123 更新时间:2023-11-30 02:51:40 25 4
gpt4 key购买 nike

我正在尝试遍历一个由字符串和整数组成的结构列表。字符串只是包含 url 的行,并且某些 url 有重复项。它们按字母顺序排列,因此任何和所有重复项都彼此相邻。 int 是一个计数器,用于计算某个 url 的拷贝数量。我需要做的是只打印出每个 url 的一个实例,以及该 url 最初在数组中的实例数。 我想弄清楚的是如何删除每个 url 除了一个实例之外的所有实例我想知道是否有人知道执行此操作的技术。

这是我到目前为止为程序的这个特定部分编写的代码:

 void histogram(const int MaxPages, istream& input, ostream& output)
{


string temp;
int current = 0;
CountedLocation *dynamicArray = new CountedLocation[MaxPages];
int toBeMoved = current - 1;

getline(input, temp);

while(!input.eof())
{

temp = extractTheRequest(temp);
toBeMoved = current-1;
dynamicArray[current].locator = temp;
if(isAGet(temp))
{

temp = extractLocator(temp);
while (toBeMoved >= 0 && temp < dynamicArray[toBeMoved].locator)
{
dynamicArray[toBeMoved+1].locator = dynamicArray[toBeMoved].locator;
dynamicArray[toBeMoved+1].counter = 1;
--toBeMoved;
}
dynamicArray[toBeMoved+1].locator = temp;
dynamicArray[toBeMoved+1].counter = 1;
}

current++;
getline(input, temp);

}
for(int i=0; i < MaxPages; i++)
{
string temp = dynamicArray[i].locator;
temp = "\"" + temp + "\"";

dynamicArray[i].locator = temp;
}
//int tempMax = MaxPages;
for(int i=0; i < current; i++)
{
if(search(dynamicArray, MaxPages, dynamicArray[i].locator) == search(dynamicArray, MaxPages, dynamicArray[i+1].locator))
{
int toBeMoved = i;
dynamicArray[i+1].counter = dynamicArray[i].counter + 1;
while (toBeMoved < current-1)
{
dynamicArray[toBeMoved] = dynamicArray[toBeMoved+1];
++toBeMoved;
}
--current;
if(search(dynamicArray, MaxPages, dynamicArray[i].locator) == search(dynamicArray, MaxPages, dynamicArray[i+1].locator))
continue;

}
}

for(int i=0; i < current+1; i++)
{
cerr << dynamicArray[i].locator<< ", " << dynamicArray[i].counter << endl;
output << dynamicArray[i].locator<< ", " << dynamicArray[i].counter << endl;
}
delete [] dynamicArray;

}

最佳答案

为您的结构创建一个新的vector。从流的开头开始。遍历流,如果当前字符串与 vector 中最后一个元素中的字符串不同,则将初始化为该字符串的元素推到 vector 的后面,将计数器设置为 1。否则,只需增加与最后一个 vector 元素关联的计数器。移动到流中的下一个字符串。假设输入字符串确实由已经排序的字符串组成,那么在最后,vector 包含具有出现次数的唯一字符串。

在未经测试的伪代码中:

std::vector<MyStruct> love_to_count (istream &input) {
std::string url;
std::vector<MyStruct> v;
if (! (input >> url)) return v;
v.push_back(MyStruct(url, 1));
while (input >> url) {
if (url != v.back().url) {
v.push_back(MyStruct(url, 1));
} else {
v.back().count += 1;
}
}
return v;
}

关于c++ - 从结构数组中删除重复的字符串并计算它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com