Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cambio mayúscula-minúscula en C

Estas en el tema de Cambio mayúscula-minúscula en C en el foro de C/C++ en Foros del Web. Muy buenas, estoy haciendo una función en C a la que le llega una cadena con un nombre propio todo en mayúsculas. El caso es ...
  #1 (permalink)  
Antiguo 24/05/2012, 13:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Cambio mayúscula-minúscula en C

Muy buenas, estoy haciendo una función en C a la que le llega una cadena con un nombre propio todo en mayúsculas. El caso es que lo voy a transformar al formato: Nombre Propio y el problema es con las tildes. Pues no sé si es C o el make que tengo, pero no me las coge. me da warnings del tipo: multi-character character constant
y no śe como arreglarlo.
El código sería el siguiente:
Código C:
Ver original
  1. /*Función convierteMinus
  2.  @param n E/S variable que almacena el carácter a convertir en minúscula
  3.  return: n devuelve el carácter en minúscula*/
  4. char convierteMinus(char n) {
  5.   char    nu;
  6.  
  7.   if(n == 'Á')
  8.     nu = 'á';
  9.   if(n == 'É')
  10.     nu = 'é';
  11.   if(n == 'Í')
  12.     nu = 'í';
  13.   if(n == 'Ó')
  14.     nu = 'ó';
  15.   if(n == 'Ú')
  16.     nu = 'ú';
  17.   if(n != 'Á' && n != 'É' && n != 'Í' && n != 'Ó' && n != 'Ú')
  18.     nu = n - ('a' - 'A');
  19.   return nu;
  20. }
  21.  
  22. /*Función convierteMayus
  23.  @param n E/S variable que almacena el carácter a convertir en mayúscula
  24.  return: n devuelve el carácter en mayúscula*/
  25. char convierteMayus(char n) {
  26.   char nu;
  27.  
  28.   if(n == 'á')
  29.     nu = 'Á';
  30.   if(n == 'é')
  31.     nu = 'É';
  32.   if(n == 'í')
  33.     nu = 'Í';
  34.   if(n == 'ó')
  35.     nu = 'Ó';
  36.   if(n == 'ú')
  37.     nu = 'Ú';
  38.   if(n == 'Ñ')
  39.     nu = 'ñ';
  40.   if(n != 'á' && n != 'é' && n != 'í' && n != 'ó' && n != 'ú')
  41.     nu = n + ('a' - 'A');
  42.   return nu;
  43. }
  44.  
  45. /*Función convierteCadena
  46.  @param cad[] E/S es la cadena que nos llega para convertir a Nombre Propio
  47.  return: no devuelve nada*/
  48. void convierteCadena(char cad[]) {
  49.   int     i = 0;
  50.   char    letra;
  51.  
  52.   while(cad[i] != '\0') {
  53.     if(cad[i] != '\0') {
  54.       if(cad[i] == ' ') {
  55.     ++i;
  56.     /*CONVERTIR A MAYÚSCULA */
  57.     letra = cad[i];
  58.     cad[i] = convierteMayus(letra);
  59.     ++i;
  60.       } else {
  61.     if(i == 0) {
  62.       /*CONVERTIR A MAYÚSCULA */
  63.       letra = cad[i];
  64.       cad[i] = convierteMayus(letra);
  65.       ++i;
  66.     } else {
  67.       /*CONVERTIR A MINÚSCULA */
  68.       letra = cad[i];
  69.       cad[i] = convierteMinus(letra);
  70.       ++i;
  71.     }
  72.       }
  73.     } else
  74.       printf("Hemos convertido a nombre propio\n");
  75.   }
  76. }

el problema esta en las funciones de arriba.
gracias!
  #2 (permalink)  
Antiguo 25/05/2012, 01:59
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Cambio mayúscula-minúscula en C

En <ctype.h> tienes las funciones tolower y toupper, que te transforman un carácter a minúsculas o mayúsculas, respectivamente. Comprueba cómo funciona para las vocales acentuadas y la letra 'ñ', que no has puesto.

Ojo, porque el resultado que obtengas puede depender del tipo de letra empleado, de la configuración del país y de si estás en modo consola o en una aplicación Windows. Los códigos para los caracteres especiales (tales como vocales acentuadas, letra 'ñ', etc.) no son estándar.
  #3 (permalink)  
Antiguo 25/05/2012, 16:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Cambio mayúscula-minúscula en C

lo voy a probar gracias
ah, y supuestamente los caracteres con tilde ocupan 2 posiciones luego no sé como empezar a cogerlos si en la 1ª letra hay una tilde
  #4 (permalink)  
Antiguo 26/05/2012, 05:51
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Cambio mayúscula-minúscula en C

Prueba escribiendo un programilla que te lea del teclado una cadena de caracteres y luego te imprima los códigos ASCII de los caracteres de la cadena. Introduce vocales acentuadas y 'ñ' a ver qué te dice.
  #5 (permalink)  
Antiguo 27/05/2012, 12:16
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Respuesta: Cambio mayúscula-minúscula en C

Cita:
Iniciado por Fw190 Ver Mensaje
Prueba escribiendo un programilla que te lea del teclado una cadena de caracteres y luego te imprima los códigos ASCII de los caracteres de la cadena. Introduce vocales acentuadas y 'ñ' a ver qué te dice.
sale -61
para todo, á ñ......
  #6 (permalink)  
Antiguo 27/05/2012, 13:56
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Cambio mayúscula-minúscula en C

Lo mas probable es q no lo tome como un caracter valido. No uses letras acentuadas ni la ñ por las dudas

Saludos
  #7 (permalink)  
Antiguo 29/05/2012, 00:49
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Cambio mayúscula-minúscula en C

El tipo char es (en realidad) signed char, que con 8 bits te da un rango de -128 a +127. Con unsigned char tendrías un rango de 0 a 255. El código ASCII original era de 7 bits, lo que daba un rango de 0 a +127, y al emplear 8 bits, los nuevos códigos disponibles (de 128 a 255) se utilizaron para caracteres no estándar.

Al definir el dato como char (en realidad, signed char), en 8 bits, el octavo bit se utiliza para indicar signo (0=positivo, 1=negativo, y lo mismo ocurre con los demás tipos enteros). Los valores de 0 a 127 (0x00 a 0x7F hex, 00000000 a 01111111 binario) son positivos, y los valores de 128 a 255 (respectivamente, 0x80 a 0xFF hex, 10000000 a 11111111) se te van a traducir en -128 a -1 (sí, en ese orden).

Por lo tanto, utiliza el tipo unsigned char, y a ver qué sale.

Etiquetas: arrays, cadenas, conversion, mayusculas, minusculas, programacion, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:17.