Manipular cadenas

Iniciado por mili03, 27 Junio 2010, 22:50 PM

0 Miembros y 1 Visitante están viendo este tema.

mili03

otra preguntita me disculpan pero no se a quien preguntar , es otro programita en C es sobre un menu el ejercicio dice que realice un programa que pida una cadena de caracteres y que muestre un menu con las siguienetes opciones
1.cadena al reves
2.numero de caracteres
3.cadena en mayuscula
4.cadena en minusculas
5.salir
esto es lo que llevo hasta ahora, lo estoy haciendo con while pero no puedo lograr que me muestre la opcion si pulso el num 1 si no q me sale corrido, ayudenme porfa, ha me han dicho que con case es mejor pero no se talves me proporcionan un ejemplo para intntarlo Gracias por Todo.
aca les muestro lo que e intentado hacer:
#include <stdio.h>
void main (void)
{
   char c, palabra[21];
   int i;
int opcion;

printf("Teclee la palabra que decee:\n");
   scanf("%s", palabra);
   i =0;
printf("Eliga la opcion que quiere \n:");
printf("\n1-->numero de caracteres");
printf("\n2-->cadena al revez");
printf("\n3-->cadena en mayuscula");
printf("\n4-->cadena en minuscula");
printf("\n5-->salir\n  opcion:");
scanf("%s",&opcion);

 
   while(palabra[i++] != '\0');
     
   printf("%s tiene %d letras.\n", palabra, i);
   printf("%s escrita al revés es: ", palabra);
   while (i >= 0)
       printf("%c", palabra[i--]);


}




Littlehorse

mili03, títulos descriptivos por favor. :)

Prueba con un switch-case para las opciones y con funciones para cada tarea.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

@synthesize


leogtz

Deber usar int main(), no void main(), un compilador decente no te dejaría compilar.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

nicolas_cof

mili03, ademas de lo ya mencionado

int main( void ) {  }

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Otra recomendacion seria usar fgets() y no scanf()

Y otra seria no abusar del uso de printf() ya que con uno podrias englobar todas esas cadenas

Salu10.

leogtz

Viendo el código, me parece que i se incrementa de más, prueba a hacer:

while(palabra[i++] != '\0');
    i--;
   
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

nicolas_cof

Otra forma de poder saber la cantidad de caracteres de una cadena es usando la funcion strlen() de la libreria string.h que te menciono Daemon Freedom

Y con respecto a minisculas y mayusculas te dejo un codigo de ejemplo

#include <stdio.h>
#include <string.h>

int main( void )
{
   char min[] = "abcdefghijklmnopqrstuvwxyz";
   char may[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   int i;

   for ( i = 0; i < strlen( min ); ++i )
   {
       if ( min[i] >= 97 && min[i] <= 122 )
           min[i] -= 32;
   }

   for ( i = 0; i < strlen( may ); ++i )
   {
       if ( may[i] >= 65 && may[i] <= 90 )
           may[i] += 32;
   }

   printf( "de minuscula a mayuscula: %s\n"
           "de mayuscula a minuscula: %s\n", min, may );

   return 0;
}


http://personal.telefonica.terra.es/web/oscarmartinez/_imatges/ascii.gif

Salu10.