elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  letras iniciales de una oracion en mayuscula
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: letras iniciales de una oracion en mayuscula  (Leído 3,165 veces)
bobitttyy

Desconectado Desconectado

Mensajes: 5


Ver Perfil
letras iniciales de una oracion en mayuscula
« en: 11 Abril 2015, 09:50 am »

si tengo la siguiente oración:
*esto es un mensaje
y quiero cambiarlo a :
*Esto Es Un Mensaje
Código:
#include <stdio.h>
int main (void) {
 int n;
char cad[80],c;
cout<<"ingresa frase:\n";
gets(cad);
n=strlen(cad);
cad[0]=cad[0]-32;
for(int i=0;i<n-2;i++){
if (cad[i]== ' ' || cad[i]== '.' || cad[i]== ','){
cad[i+1] =cad[i+1]-32;
}
}
for(int i=0;i<n;i++){
cout<<cad[i];
}
cad[n]= '\0';
return 0;
}

pero esto solo me funciona solo para un espacio en blanco entre palabra y palabra. Yo quiero un metodo mas general.....con mas espacios en blanco, por ejemplo:

esto___es__un____mensaje
Esto___Es__Un____Mensaje


« Última modificación: 11 Abril 2015, 09:54 am por bobitttyy » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: letras iniciales de una oracion en mayuscula
« Respuesta #1 en: 11 Abril 2015, 10:17 am »

Podrías meter que en vez de
Citar
if (cad== ' ' || cad== '.' || cad== ',')
, comprobar si es una letra o un número, y si no es ni una letra ni un número supones que es un "espacio" o lo que sea.


En línea

rarrav26

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: letras iniciales de una oracion en mayuscula
« Respuesta #2 en: 11 Abril 2015, 13:57 pm »

Proba cambiando
esto:
Código:
gets(cad);
por esto:
Código:
cin.getline(cad,80);
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: letras iniciales de una oracion en mayuscula
« Respuesta #3 en: 11 Abril 2015, 17:42 pm »

Yo quiero un metodo mas general.....con mas espacios en blanco
Lo primero que debes hacer es enfocarte en la biblioteca estándar de C++ evitando el uso de funciones como gets, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

En cuanto al programa basta con utilizar una bandera de estado la cual pones a uno (o true) al encontrar un carácter parte de una palabra y cero (o false) cuando este sea un separador. Justo cuando la pones a uno cambias el carácter a mayúsculas (casi lo mismo que uno de los ejemplos de K&R).

Para darte una idea un programa en C con esa aproximación es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main(void)
  6. {
  7.   char cad[] = "una   cadena de prueba   con multiples   espacios";
  8.   int st;
  9.   int i;
  10.  
  11.   printf("%s\n", cad);
  12.  
  13.   st = 0;
  14.   for (i = 0; cad[i] != '\0'; i++)
  15.      if (isspace(cad[i]))
  16.         st = 0;
  17.      else if (st == 0){
  18.         st = 1;
  19.         cad[i] = toupper(cad[i]);
  20.      }
  21.   printf("%s\n", cad);
  22.  
  23.   return EXIT_SUCCESS;
  24. }

Toma la idea y adecuala a C++. Por ejemplo puedes empezar evitando el array utilizando en su lugar un objeto de la clase string y para leer la linea y almacenarla en ella utilizas la función getline.

Un saludo
« Última modificación: 11 Abril 2015, 19:49 pm por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: letras iniciales de una oracion en mayuscula
« Respuesta #4 en: 11 Abril 2015, 18:32 pm »

La aproximación que expones, presenta un comportamiento indefinido debido a que estas modificando un puntero que apunta a una cadena literal (linea 19)

Un Saludo
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: letras iniciales de una oracion en mayuscula
« Respuesta #5 en: 11 Abril 2015, 19:48 pm »

La aproximación que expones, presenta un comportamiento indefinido debido a que estas modificando un puntero que apunta a una cadena literal (linea 19)
Ouch! Gracias por indicarlo, ya actualice el programa.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?][C]¿Creación de procesos iniciales?
Programación C/C++
Run.EXE 4 3,059 Último mensaje 19 Agosto 2012, 22:29 pm
por Foxy Rider
Programas iniciales para ser white hat
Redes
thezan 3 3,846 Último mensaje 14 Diciembre 2012, 01:34 am
por dato000
Sony da a conocer las restricciones iniciales que tendrá PlayStation 4
Noticias
wolfbcn 0 1,181 Último mensaje 1 Noviembre 2013, 03:03 am
por wolfbcn
Recorrer una string para obtener iniciales
Java
andressalasmx 3 7,499 Último mensaje 9 Noviembre 2014, 10:12 am
por ivancea96
Contar letras en cualquier oración
Programación C/C++
erickcasita 8 4,088 Último mensaje 7 Enero 2018, 18:10 pm
por vangodp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines