我正在尝试使用向量实现来解决挑战性问题。但是,当我尝试将字符串存储在vector中时,却以某种方式遇到分段错误。
此特定行引起问题lar.push_back(l)
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{ int t;
cin>>t;
while(t--)
{
vector <string> temp;
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
vector <string> ar ;
//{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
ar.push_back("abc");
ar.push_back("def");
ar.push_back("ghi");
ar.push_back("jkl");
ar.push_back("mno");
ar.push_back("pqrs");
ar.push_back("tuv");
ar.push_back("wxyz");
vector <string> lar;
int p=1;
while(p<=n)
{
if(p==1)
{
for(int i=0;i<ar[arr[n-2]-2].length();i++)
{
for(int j=0;j<ar[arr[n-1]-2].length();j++)
{
char s=ar[arr[n-2]-2][i];
char h=ar[arr[n-1]-2][j];
string l;
l.push_back(s);
l.push_back(h);
lar.push_back(l);
}
}
n=n-1;
}
else
{
for(int i=0;i<ar[arr[n-2]-2].length();i++)
{
for( int j=0;lar.size();j++)
{
char s=ar[arr[n-2]-2][i];
string t;
t.push_back(s);
string z=s+lar[j];
//t.push_back("aaa");
temp.push_back(z);
// temp.push_back(lar[j]);
}
}
lar=temp;
}
p++;
}
for(int i=0;lar.size();i++)
cout<<lar[i]<<" ";
}
return 0;
}
当我输入为
1
2
2 3
输出为:aa ab ac ba bb bc ca cb cc(有分段错误)
但是当我输入为
1
3
2 3 4
没有给出输出,并且发生分段错误。
最佳答案
代码的最后部分有一个错误:
for(int i=0;lar.size();i++)
应该:
for(int i=0;i<lar.size();i++)
否则,循环未终止,因此到达未填充的lar区域,因此读取无效,结果出现了段错误。
我也正在寻找另一个问题。
我在else {}部分中发现了第二个问题,您得到了:
string z=s+lar[j];
但是j来自上一个循环。这条线也崩溃了。
我不得不说,即使将代码更改为:
string z=s+lar[i];
我怀疑该算法存在设计缺陷。不过,它仍然比Lennart Poettering投入linux的代码更好。