Error de segmentación buscando las cadenas más largas en un vector.
Dado un array de cadenas, devuelve otro array que contiene todas las cadenas más largas. La solución que desarrollé está disponible a continuación:
#include <iostream>
#include <vector>
using namespace std;
vector<string> solution(vector<string> ia) {
int maxi = -1;
int size = ia.size();
vector<string> iasol;
for (int i = 0; i < size; i++) {
int m = ia[i].length();
cout << m << " " << maxi << endl;
if (m > maxi)
maxi = m;
}
for (int i = 0; i < size; i++) {
int m = ia[i].length();
if (m == maxi) {
iasol.push_back(ia[i]);
cout << iasol[i];
}
}
return iasol;
}
int main() {
vector<string> inputArray = {"aba", "aa", "ad", "vcd", "aba"};
solution(inputArray);
}
Se espera que el programa funcione de la siguiente manera:
ENTRADA
inputArray ← ["aba", "aa", "ad", "vcd", "aba"]
SALIDA
solution(inputArray) → ["aba", "vcd", "aba"]
La solución anterior da el siguiente error:
3 -1
2 3
2 3
3 3
3 3
Segmentation fault
¿Cómo resuelvo este problema?
davy.ai
Hay algunos problemas con la solución proporcionada.
En primer lugar, el vector
iasol
no está siendo redimensionado al tamaño correcto antes de ser utilizado. Esto se puede solucionar agregandoiasol.resize(size);
después de la declaración del vector.En segundo lugar, al agregar las cadenas más largas al vector
iasol
, se está utilizando un índice incorrecto. En lugar deiasol[i] = ia[i];
, utilizaiasol.push_back(ia[i]);
para agregar la cadena al final del vector.Aquí está la solución corregida:
Esto debería dar la salida correcta:
aba vcd aba