- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数,我想比较两个数组,找到匹配项,然后创建第三个数组。该函数找到了比较,但是当我尝试返回一个对象时,程序中止了。我最初的想法是 c1.numMembers 和 c2.numMembers 具有不同的值可能会导致我的循环出现故障。任何帮助表示赞赏。这是我的。
Club mergeClubs(Club& c1, Club& c2)
{
Club combined;
combined.clubName = c1.clubName + "/" + c2.clubName;
string* x = new string[combined.numMembers];
for(int i = 0;i<c1.numMembers;i++)
{
for(int k =0;k<c2.numMembers;k++)
{
if(c1.members[i]==c2.members[k])
{
x[combined.numMembers] = c1.members[i];
combined.numMembers++;
}
}
}
combined.members = x;
return combined;
}
谢谢大家的回答。我知道使用 vector 会更简单,但我根本不允许更改有关初始类的任何内容,其中 members* 是我们必须在每个 Club 类型中使用的动态数组。我更改了我的代码,并且我拥有它,所以最终数组 combined.members 中有正确的成员,但我仍然收到返回它的错误。这是我的新代码。
Club mergeClubs(Club& c1, Club& c2)
{
//I changed the arrays to vectors to sort them and find the duplicates, then wrote it back into an array. inefficient yes, but using vectors
//in the first place would have made the project 1000000000000x easier.
Club combined(c1.clubName + "/" + c2.clubName);
vector<string> x1;
vector<string> x2;
vector<string> combine;
for(int i = 0;i<c1.numMembers;i++)
{
x1.push_back(c1.members[i]);
}
for(int i = 0;i<c2.numMembers;i++)
{
x2.push_back(c2.members[i]);
}
for(int i = 0;i<x1.size();i++)
{
for(int j = 0;j<x2.size();j++)
{
if(x1[i]==x2[j])
{
combine.push_back(x1[i]);
}
}
}
for(vector<string>::const_iterator i = combine.begin(); i != combine.end(); ++i)
combined.numMembers = combine.size();
combined.members = &combine[0];
return combined;
}
相信我,我知道这是多么低效。
最佳答案
您可能需要考虑为您的 members
使用容器字符串。如果您要使用 std::set
例如,您可以执行以下操作:
std::set<std::string> a, b, c;
// assume a and b contain some strings
std::set_intersection(
a.begin(), a.end(),
b.begin(), b.end(),
std::inserter(c, c.end())
);
你也可以使用 vector
s(或另一个容器),你只需要确保它们是 sort
在创建交集之前编辑。
您的新代码的问题在于您正在分配 combined.members
指向函数返回时将被删除的指针(属于 combine
)。您仍然需要创建一个 string
的数组s 并从 vector 复制它们,如果你想走这条路(大概你在某个时候想到了这一点,但是你在 container
上的循环似乎没有任何作用)。
您仍然可以在原始指针上使用库算法,因此如果您不能更改结构,更好的解决方案可能类似于以下内容:
假设Club
看起来像这样
struct Club
{
std::string clubName;
std::string* members;
int numMembers;
};
Club mergeClubs(Club& c1, Club& c2)
{
Club combined{
c1.clubName + "/" + c2.clubName,
new std::string[c1.numMembers + c2.numMembers],
0
};
std::sort(c1.members, c1.members + c1.numMembers);
std::sort(c2.members, c2.members + c2.numMembers);
auto end = std::set_intersection(
c1.members, c1.members + c1.numMembers,
c2.members, c2.members + c2.numMembers,
combined.members
);
combined.numMembers = end - combined.members;
return combined;
}
And trust me, I know how inefficient this is.
这不仅与效率有关,我仍然会选择答案顶部的代码,即使使用标准容器比处理数组慢(通常不是,特别是如果您使用 vector
s) ,因为它更容易编写、阅读和维护。
关于c++ - 将两个字符串中的相似性写入新动态数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484204/
我需要在基于 Java 的应用程序中使用 Wordnet。我想: 搜索同义词集 找到同义词集之间的相似性/相关性 我的应用程序使用 RDF 图,我知道 Wordnet 有 SPARQL 端点,但我想最
假设我们有一个 IEnumerable Collection,其中包含 20 000 人 对象项。那么假设我们创建了另一个 Person 对象。 我们想列出所有与这个人相似的人。这意味着,例如,如果姓
我使用 JAWS 作为普通的 wordnet 来查找单词之间的相似性。 我安装了 wordnet 2.1 并添加了 jar 文件:edu.mit.jwi_2.1.4.jar 和 edu.sussex.
我用这段代码做了一个词嵌入: with open("text.txt",'r') as longFile: sentences = [] single= []
我正在尝试找出确定各种对象或数组之间的共性或相似性的最佳方法,并且有兴趣获得社区的意见。我目前正在用 javascript 构建一个早期研究原型(prototype),我需要采用一种巧妙的方式来比较对
我在将 Flash 游戏转换为 C# 时遇到问题。在 Flash 中我会使用这种语法: public function doMove() { eaze(this).to(actionTime,
我有一批形状为 (bs, m, n) 的向量(即维度为 mxn 的 bs 向量)。对于每个批处理,我想计算第一个向量与其余 (m-1) 个向量的 Jaccard 相似度 例子: a = [ [
如何使用 Whoosh 获取文档的相似性度量? 我想创建一个“相关”特征,对与文档具有高度相似性的其他先前编入索引的文档进行排名。 我是否将文档作为长查询字符串输入?我是否将文档添加到索引并以某种方式
我编写了一个 Python 函数,它接受两个列表,使用 Levenshtein 比较它们并将足够相似的单词合并到一个名为“merged”的列表中。 我如何为超过 6 个列表执行此操作?确保将每个列表与
请原谅我对 Go 的了解非常有限。我有这样的定义 type ErrorVal int const ( LEV_ERROR ErrorVal = iota LEV_WARNING
我正在从事文本分析项目,一次比较两个不同的报告并将结果保存到 pandas 数据框中。 我能够得到 cosine 和 jacard 的相似性,但需要确保我得到正确的度量。作为参数,我使用位于给定文件夹
我是一名优秀的程序员,十分优秀!