向量中的字符串交集给出分段错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向量中的字符串交集给出分段错误相关的知识,希望对你有一定的参考价值。
我已经编写了程序,如果在c ++中的字符串向量中至少有一个字符是常见的,因为我使用了set_intersection函数。我得到分段错误不知道为什么。
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int matching_characters(string s1, string s2);
int main()
{
string s;
vector<string> ss;
int n,sum=0,avg=0;
cout<<"enter no in group"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
cin >> s;
ss.push_back(s);
}
// cout<<ss[1];
// cout<<ts[1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
continue;
int t=matching_characters(ss[i], ss[j]);
cout<<t;
if(t!=0)
sum=sum+1;
}
}
cout<<"'s='"<<sum<<endl;
//avg=sum/n;
//cout<<avg;
return 0;
}
int matching_characters(string s1, string s2) {
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
string intersection;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(),
back_inserter(intersection));
return intersection.size();
}
答案
我觉得
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
continue;
会写得更好
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
请记住,n
对象的数组具有有效索引[0]...[n-1]
,我们从第一个循环中的0开始,并且在得到无效索引n之前停止迭代。为了提高效率,我们在跳过超过一半比较的点开始第二个循环。 (没有必要将A与A进行比较,并且在将A与B进行比较之后,将B与A进行比较没有意义。)
以上是关于向量中的字符串交集给出分段错误的主要内容,如果未能解决你的问题,请参考以下文章