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.

La cadena se encuentra fuera de rango.

La tarea es intercambiar dos partes de una palabra que contiene un guión (por ejemplo, tenemos 1237-456 pero deberíamos transformarlo en 456-1237). Aquí está mi código, funciona pero no muestra resultados ya que una cadena está fuera de rango y no sé por qué. Ocurrió en el primer bucle, la segunda iteración termina en error y sucede cuando strlen es 5 o más. El código:

La tarea es intercambiar dos partes de una palabra que contiene un guión (por ejemplo, tenemos 1237-456 pero deberíamos transformarlo en 456-1237). Aquí está mi código, funciona pero no muestra resultados ya que una cadena está fuera de rango y no sé por qué. Ocurrió en el primer bucle, la segunda iteración termina en error y sucede cuando strlen es 5 o más. El código:

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema con la forma en que manejas las cadenas first y second. El problema es que no estás asignando memoria para estas cadenas, por lo que cuando intentas asignar un caracter a ellas, está fuera de rango. Puedes arreglar esto asignando memoria para las cadenas antes de asignar caracteres a ellas. Por ejemplo, puedes usar la función resize para asignar memoria para las cadenas:

    “`
    #include
    #include
    #include
    using namespace std;

    int main()
    {
    int u = 0, y = 0;
    string first, second;
    int i = 0;
    string word;
    cout << “Ingresa el texto: ” << endl;
    getline(cin, word);
    int l = size(word);
    int f = word.find(‘-‘);
    cout << “La palabra tiene ” << l << ” caracteres” << endl << endl;
    first.resize(f);
    second.resize(l – f – 1);
    for (int i = 0; i < f; i++) {
    first[i] = word[i];
    }
    for (int i = f + 1; i < l; i++) {
    second[y] = word[i];
    y++;
    }
    cout << endl << second << ” – ” << first << endl;
    }
    “`

Comments are closed.