26/01/2020, 00:24:53 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Puedes practicar LATEX con el cómodo editor de Latex online
 
 
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Invertir cadena de caracteres EN C  (Leído 1009 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Estudiantee
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 423


Ver Perfil
« : 06/05/2015, 18:35:43 pm »

Cómo hago para invertir una cadena de caracteres en lenguaje C?? Yo hice este programa pero no me sale:
for(i=strlen(cad);i>=0;i--){
    cad=cad[i-1];
  }

puts(cad);
Dónde está el error?
En línea

Si alguien me invita a forocoches, se lo agradecería.
ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Conectado Conectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.439



Ver Perfil
« Respuesta #1 : 06/05/2015, 20:02:56 pm »

Hola    Editado

Un error me parece es la forma en que asignas cad=cad[i-1], en lugar de cad[i-strlen(cad)]=cad[i-1], esto tampoco funcionará ya por ejemplo en el primer paso estás asignando el primer elemento de la cadena "cad" al último elemento de la misma cadena, lo que provoca que borres el último elemento original, piensa que pasará cuando asignes el último elemento al primero.

Mejor genera otra cadena con la existente, algo como:

for(i=1;i<=strlen(cad);i++){
    cadinv[i-1]=cad[strlen(cad)-i];
  }

Faltarían detalles como definir la cadena cadinv, y si todo funciona correctamente y no te interesa seguir usando cadinv puedes asignar cad=cadinv.

Espero funcione. No lo probaré.

El problema de esta solución es que estás usando más memoria de la necesaria, al crear una cadena de más.
En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
argentinator
Consultar la FIRMAPEDIA __________________________________________________________________________________________________________________
Administrador
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7.283

Vean mis posts activos en mi página personal


Ver Perfil WWW
« Respuesta #2 : 06/05/2015, 20:21:15 pm »

Me parece que eso tampoco va a funcionar, porque se sobreescriben los elementos de la primer mitad, los cuales se pierdren y no pueden ser copiados a la segunda mitad.
Cuando finalmente se copian, se trata de los caracteres modificados, lo cual queda mal.
Por ejemplo, "mundo" se convierte en "odndo".

Además, la cadena queda guardada como array de caracteres, con los índices yendo desde 0 hasta strlen(cad) - 1, así que el índice i debe comenzar en 0.
En realidad eso estaba bien, porque ingmarov pone "i-1" y con eso se arregla el índice.
De todos modos, yo uso siempre en C los índices de 0 hasta strlen(array) - 1, poniendo "i" en el índice, así que mi código sería éste:

Se necesita una variable temporal:

int i, temp, len;
ultimo = strlen(cad) - 1;
for(i=0; i < strlen(cad); i++){
    temp = cadinv[i];
    cadinv[i]=cad[ultimo - i];
    cad[ultimo - i] = temp;
}
En línea

ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Conectado Conectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.439



Ver Perfil
« Respuesta #3 : 06/05/2015, 20:39:30 pm »

Me parece que eso tampoco va a funcionar, porque se sobreescriben los elementos de la primer mitad, los cuales se pierdren y no pueden ser copiados a la segunda mitad.
Cuando finalmente se copian, se trata de los caracteres modificados, lo cual queda mal.
Por ejemplo, "mundo" se convierte en "odndo".
Además, la cadena queda guardada como array de caracteres, con los índices yendo desde 0 hasta strlen(cad) - 1, así que el índice i debe comenzar en 0.

Se necesita una variable temporal:

int i, temp, len;
ultimo = strlen(cad) - 1;
for(i=0; i < strlen(cad); i++){
    temp = cadinv[i-1];
    cadinv[i-1]=cad[ultimo - i];
    cad[ultimo - i] = temp;
}


Hace tiempo no uso C, y últimamente he estado aprendiendo sin prisa un poco de python.  Creo que el "i-1" debería ser solamente "i" ¿cierto?.

Pensaré en otra forma, que no requiera de dos arreglos.
En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
argentinator
Consultar la FIRMAPEDIA __________________________________________________________________________________________________________________
Administrador
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7.283

Vean mis posts activos en mi página personal


Ver Perfil WWW
« Respuesta #4 : 06/05/2015, 20:51:05 pm »

Tenés razón ingmarov.
Retiro mi crítica, y corrijo mi código (que lo copié del tuyo, y no me fijé que decía "i-1" en vez de "i", y que por lo tanto estaba bien en ese aspecto).

Saludos.
En línea

ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Conectado Conectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.439



Ver Perfil
« Respuesta #5 : 07/05/2015, 16:47:42 pm »

Hola

Bueno, una solución probada en python.

Código:

>>> cad="rinconmatematico"     #Cadena a invertir
>>> i=0
>>> cadi=""   #Defino otra cadena vacía
>>> while i<len(cad):
        cadi=cadi+cad[len(cad)-1-i]   #Esto significa por ejemplo para el primer paso añadir a la cadena "cadi" el último elemento de de "cad".
        i=i+1

>>> print(cadi)  #Este comando es para imprimir la cadena "cadi".
ocitametamnocnir #Este el resultado
>>>



Creo que se puede hacer algo similar en C usando la función  "strcat"
En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC XHTML 1.0 válido! CSS válido!