使用向量的移动键盘排列(分段故障)

Mobile keypad permutation (SEGMENTATION FAULT) using vector

本文关键字:分段 故障 排列 键盘 向量 移动      更新时间:2023-10-16

我正在尝试使用矢量实现解决挑战问题。但是,当我尝试将字符串存储在向量中时,我会以某种方式遇到细分错误。

此特定行引起的问题 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 BB BC CA CB CC(带有segmantation故障(

但是当我给出输入为

1
3
2 3 4

未给出输出,并发生分割故障。

代码的最后一部分有一个错误:

for(int i=0;lar.size();i++)

应该是:

for(int i=0;i<lar.size();i++)

其他循环是未终止的,因此它到达了无人物的LAR区域,因此有无效的读数,结果有一个segfault。

似乎还有一个其他问题,我正在追踪。

我在其他{}部分中找到了第二期,您已经有:

string z=s+lar[j];

但是J是从上一个循环中。这条线也崩溃了。

我必须说,即使您将其更改为:

,代码也无法正常工作。
string z=s+lar[i];

我怀疑该算法有一个设计缺陷。它仍然比Lennart诗人的完全drivel的代码更好。