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.

Cómo poner espacios dentro de una matriz

Tengo cadenas, que se sirven en una matriz. Luego hago esta manipulación, como reorganizar las letras en una palabra. Debería ser así: “Me gustan los perros” -> “Me kilo sdog”

Así es como obtengo las frases:

do {
        gets_s(sent);
        if (strcmp(sent, STEND) == 0) 
            break;
        mp[k] = _strdup(sent); 
    } while (++k < NMAX);

Y cómo cambio las letras

for (int rech = 0; rech < k; rech++) {
        char *piece;
        piece = strtok(mp[rech], " ");
        while (piece != NULL) { 
            char temp[20];
            char *piece2 = temp;

        strcpy(piece2, piece);
        int k = strlen(piece) / 2;
        int i =strlen(piece);
        for (i - 1; i != 0; i--) {
            piece[k - 1] = piece2[i - 1];
            k--;
        }
        k = strlen(piece) / 2;
        for (i = 0;k!=strlen(piece);i++) {
            piece[k] = piece2[i];
            k++;
        }

        printf("%s ", piece);
        piece = strtok(NULL, " "); 
    }
    printf("\n");
}

Pero cuando quiero obtener mi primera frase nuevamente en la matriz mp, obtengo “likeldogsdo”. Y como no hay espacios, no puedo obtener este texto de nuevo.
¿Cómo puedo poner espacios en esta cadena?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para volver a agregar espacios en la cadena manipulada, puedes modificar el código que reorganiza las letras en una palabra para agregar también espacios entre las palabras mientras se procesan. Una forma de hacer esto es agregar una bandera booleana que lleve un seguimiento de si la palabra actual que se está procesando es la primera palabra de la oración o no. Si lo es, entonces la bandera no debería agregar un espacio delante de la palabra. Si no lo es, entonces la bandera debería agregar un espacio antes de la palabra. Aquí está el código modificado:

    // bandera booleana para llevar un seguimiento de si la palabra actual es la primera palabra en la oración
    bool isFirstWord = true;
    
    for (int rech = 0; rech < k; rech++) {
        char *piece;
        piece = strtok(mp[rech], " ");
        while (piece != NULL) { 
            char temp[20];
            char *piece2 = temp;
    
            strcpy(piece2, piece);
            int k = strlen(piece) / 2;
            int i =strlen(piece);
            for (i - 1; i != 0; i--) {
                piece[k - 1] = piece2[i - 1];
                k--;
            }
            k = strlen(piece) / 2;
            for (i = 0;k!=strlen(piece);i++) {
                piece[k] = piece2[i];
                k++;
            }
    
            // agregar espacio antes de la palabra si no es la primera palabra en la oración
            if (!isFirstWord) {
                printf(" ");
            }
            else {
                // establecer la bandera en falso para las palabras subsiguientes en la oración
                isFirstWord = false;
            }
    
            printf("%s", piece);
            piece = strtok(NULL, " "); 
        }
        printf("\n");
        // reiniciar la bandera para cada oración
        isFirstWord = true;
    }
    

    Con esta modificación, cuando pases la cadena manipulada a través de este código, debería volver a agregar los espacios entre las palabras y deberías obtener la cadena original de la oración en mp.

Comments are closed.