es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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 agregando iasol.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 de iasol[i] = ia[i];, utiliza iasol.push_back(ia[i]); para agregar la cadena al final del vector.

    Aquí está la solución corregida:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    vector<string> solution(vector<string> ia) {
      int maxi = -1;
      int size = ia.size();
      vector<string> iasol;
      iasol.resize(size);
    
      for (int i = 0; i < size; i++) {
        int m = ia[i].length();
        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]);
        }
      }
      return iasol;
    }
    
    int main() {
        vector<string> inputArray = {"aba", "aa", "ad", "vcd", "aba"};
        vector<string> outputArray = solution(inputArray);
        for (int i = 0; i < outputArray.size(); i++) {
          cout << outputArray[i] << " ";
        }
        cout << endl;
    }
    

    Esto debería dar la salida correcta:
    aba vcd aba

Comments are closed.