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.

Programación en C – Cómo cambiar cada aparición de un carácter en una cadena por otro carácter.

La tarea consiste en que el usuario inserte una cadena y el programa devolverá un mensaje secreto que cambia cada ocurrencia de un carácter de esa cadena con otro carácter. La lista de nuevos caracteres que se insertarán se dan por la permutación “qjczieaungsdfxmphybklortvw”, que corresponden a cada letra del alfabeto. Por ejemplo, la cadena “abcxyz” devolverá “qjctvw”. El programa ignorará los símbolos y las letras mayúsculas, por lo que “Abc” se convertirá en “Ajc”.

Intenté lograr esto comparando cada posición de la cadena con cada letra del alfabeto. Si coincide, entonces esa posición de la cadena será reemplazada por la posición de la permutación secreta que es la misma que la posición del alfabeto tradicional (ya que corresponden). El código funciona técnicamente, pero no estoy obteniendo los valores correctos. Por ejemplo, por cada “a” debería obtener una “q”, pero se devuelve una “h”. Si alguien puede arreglar mi código, se agradecerá enormemente.

CÓDIGO A CONTINUACIÓN: POR FAVOR COPIE Y PEGUE EN SU EDITOR DE CÓDIGO PREFERIDO PARA VER LO QUE QUIERO DECIR AL DEVOLVER LOS VALORES INCORRECTOS.

//Incluir biblioteca
#include <stdio.h>

//Incluir biblioteca de cadena
#include <string.h>

//Definir la longitud máxima de la cadena
#define MAX_STR_LEN 256

int main(void)
{
char perm[] = “qjczieaungsdfxmphybklortvw”;
char alphabet[] = “abcdefghijklmnopqrstuvwxyz”;
int i, j;
char msg[MAX_STR_LEN+1];

/* leer el mensaje desde la terminal usando fgets. La variable msg contendrá el mensaje. */
fgets(msg, MAX_STR_LEN, stdin);

//compara cada valor de la cadena con el alfabeto/
for (i = 0; i < (strlen(msg) – 1); i++) {
for (j = 0; j < (strlen(alphabet) – 1); j++) {
if (msg[i] == alphabet[j]) {msg[i] = perm[j];}
}
}
printf(“%s”, msg);
}</string.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay un error en el código en la línea 17 y 19, donde se compara la longitud de las cadenas con el índice actual de los bucles for. Para arreglar el código, los bucles deben iterar hasta que se alcance la longitud completa de las cadenas, incluido el carácter nulo.

    Aquí está el código corregido:

    “`c
    #include <stdio.h>
    #include <string.h>
    #define MAX_STR_LEN 256

    int main(void)
    {
    char perm[] = “qjczieaungsdfxmphybklortvw”;
    char alphabet[] = “abcdefghijklmnopqrstuvwxyz”;
    int i, j;
    char msg[MAX_STR_LEN+1];

    /* lee el mensaje desde la terminal usando fgets. La variable msg contendrá el mensaje. */
    fgets(msg, MAX_STR_LEN, stdin);

    /* compara cada valor de la cadena con el alfabeto */
    for (i = 0; i <= strlen(msg); i++) {
    for (j = 0; j <= strlen(alphabet); j++) {
    if (msg[i] == alphabet[j]) {msg[i] = perm[j];}
    }
    }
    printf(“%s”, msg);
    return 0;
    }
    “`</string.h></stdio.h>

Comments are closed.