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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cadenas y uso de MAYUSCULA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cadenas y uso de MAYUSCULA  (Leído 3,348 veces)
JoshDur

Desconectado Desconectado

Mensajes: 3


Ver Perfil
cadenas y uso de MAYUSCULA
« en: 25 Noviembre 2019, 01:22 am »

estoy comenzando con la carrera y estoy bloqueado con esta tarea en particular.

Mi tarea es sobre hacer un programa que convierte en MAYÚSCULA la ultima palabra de una frase con C


« Última modificación: 25 Noviembre 2019, 01:29 am por JoshDur » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: cadenas y uso de MAYUSCULA
« Respuesta #1 en: 25 Noviembre 2019, 02:03 am »

No sé si tienes alguna restricción en cuanto a que tengas que implementarlo todo sin utilizar funciones que ya existen...
Si no es tu caso y puedes usar funciones tienes:
  • strrchr() de la librería <string.h> que te devuelve un puntero a la última coincidencia de un caracter dado.
  • toupper() de la librería <ctype.h> que convierte un caracter en mayúscula.

Si no puedes usar dichas funciones y tienes que implementarlo tú, te recomendaría hacer una función que dado un <char[]>, te devuelva la posición (índice) en el que empieza la última palabra; y luego con un bucle vas convirtiendo cada letra en mayúscula.
En ASCII una letra minúscula vale 28 más que en mayúscula si no me equivoco por lo que si haces:
Código
  1. char minuscula = 'a';
  2. char mayuscula = minuscula - 28; // esto deberia guardar 'A'
  3.  
  4. // Sino siempre puedes hacer:
  5. char minuscula = 's';
  6. char mayuscula = minuscula - ('a' - 'A'); // esto deberia dar 'S'

Es posible que si acabas de empezar, esto que te acabo de soltar te suene a chino y no entiendas nada. Si tienes alguna duda o no consigues avanzar en tu tarea, puedes poner el código en un mensaje entre etiquetas de Código GeSHi para que podamos ayudarte mejor.
 


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
JoshDur

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: cadenas y uso de MAYUSCULA
« Respuesta #2 en: 25 Noviembre 2019, 02:09 am »

no tengo restricción siempre y cuando sea en ".C", mi verdadera duda es poder "tomar" la ultima palabra que el usuario escriba y escribir nuevamente la frase con la ultima palabra en mayúscula.
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: cadenas y uso de MAYUSCULA
« Respuesta #3 en: 25 Noviembre 2019, 02:39 am »

Las palabras en C se toman en un array de char, o lo que es lo mismo, una cadena de caracteres, un vector. Cada posición de la cadena contiene un caracter, pongamos el típico ejemplo: "hola mundo". Al guardar esto en C quedaría así:
Código
  1. char frase[] = "hola mundo";
  2. // Internamente queda guardado como:
  3. // frase = |'h'|'o'|'l'|'a'|' '|'m'|'u'|'n'|'d'|'o'|'\0'|
El último es un carácter especial que utiliza C para saber donde acaba la cadena. Se pone implícitamente.
Entonces si haces:
Código
  1. printf("%s", frase); // muestra: "hola mundo" sin las comillas
  2. //pero si haces:
  3. printf("%s", frase+5); // muestra: "mundo" sin las comillas porque empieza a mostrar 5 posiciones mas a la derecha

Como puedes usar las funciones que te dije anteriormente, sólo tienes que crear un puntero que como su nombre indica apunta y hacer que apunte al comienzo de la última palabra:
Código
  1. char frase[] = "hola mundo";
  2. char *puntero = strrchr(frase, ' '); // devuelve un puntero apuntando al ultimo espacio de la frase
  3. ++puntero; // incrementas el puntero para que apunte a la primera letra de la palabra
  4. while(*puntero != '\0'){ // mientras no acabe la cadena
  5.    *puntero = toupper(*puntero); // modificas el valor de cada celda por su mayuscula correspondiente
  6.    ++puntero; // sigues avanzando
  7. }

Al final resulta que prácticamente te lo he dado hecho pero me parecía que sino te ibas a liar con lo de punteros, el asterisco, los incrementos, las funciones esas, etc.
El puntero es como una variable que en vez de guardar un valor como tal, guarda una posición de memoria. Para acceder al contenido de dicha posición de memoria se utiliza el asterisco (lo que se conoce como desreferenciar el puntero).
Código
  1. char letra = 'a';
  2. char *puntero = &letra; // el asterisco determina que se trata de un puntero y el & devuelve la direccion de memoria de la variable (letra en este caso)
  3. printf("%d", puntero); // posicion de memoria de la variable letra
  4. printf("%c", *puntero); // contenido de la variable a la que apunta el puntero (letra)

Estoy intentando aclararlo pero cuanto más escriba creo que más complejo lo voy a dejar así que si hay cosas que de momento no entiendes, no te preocupes. Ya irás avanzando en el curso y al final verás como esto es una tontería.

PD: Para pedir valores se suele usar <scanf()> pero si se trata de una cadena, lo recomendable y seguro es hacerlo con <fgets()>:
Código
  1. char cadena[50]; // cadena de longitud maxima 50
  2. printf("Introduce una cadena: ");
  3. fgets(cadena, 50, stdin);
Lo malo de esta función es que también guarda el ENTER que pulsas al final por lo que si introduces "hola", en la cadena se guardaría como:
cadena = |'h'|'o'|'l'|'a'|'\n'|'\0'|
La '\n' determina un salto de línea. Para eliminar eso es muy sencillo ahora que ya te he mostrado como funciona <strrchr()>:
Código
  1. // supongamos que el usuario introduce "hola mundo". La cadena quedaria:
  2. char cadena[] = "hola mundo\n"; // recordemos que siempre acaba en '\0'
  3. char *final = strrchr(cadena, '\0'); // busca el '\0' que siempre va a estar el ultimo
  4. *(--final) = '\0'; // nos vamos una posicion para atras y ponemos el '\0' ahi para eliminar el '\n'
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
JoshDur

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: cadenas y uso de MAYUSCULA
« Respuesta #4 en: 25 Noviembre 2019, 04:01 am »

eres un héroe sin capa, gracias por la explicación que fue mejor que el que me da el profesor. nuevamente gracias
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: cadenas y uso de MAYUSCULA
« Respuesta #5 en: 26 Noviembre 2019, 15:11 pm »

Buscar el ultimo espacio en blanco podria fallar si la frase tiene solo 1 palabra, sin espacio alguno.

Tal vez resulte mejor poner un puntero al final y devolverse hasta llegar o al inicio de la palabra o bien a un espacio en blanco.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: cadenas y uso de MAYUSCULA
« Respuesta #6 en: 26 Noviembre 2019, 19:42 pm »

Buscar el ultimo espacio en blanco podria fallar si la frase tiene solo 1 palabra, sin espacio alguno.

Tal vez resulte mejor poner un puntero al final y devolverse hasta llegar o al inicio de la palabra o bien a un espacio en blanco.
Cierto, se podría arreglar así:
Código
  1. char *puntero = strrchr(frase, ' ');
  2. if(puntero == NULL)
  3.    puntero = frase;
La otra manera que comentabas también es posible.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
4D1cTo 4 5,816 Último mensaje 18 Junio 2006, 15:10 pm
por Hadess_inf
primera letra mayuscula en textbox
Programación Visual Basic
erick185 1 7,552 Último mensaje 22 Octubre 2008, 04:19 am
por cassiani
MAYUSCULA
Programación C/C++
anita0421 6 3,882 Último mensaje 21 Noviembre 2012, 19:01 pm
por rir3760
convertir minúscula a mayúscula « 1 2 »
Programación C/C++
m@o_614 10 47,482 Último mensaje 24 Abril 2017, 12:31 pm
por NikNitro!
convertir todo a mayuscula, 1ra palabra en mayuscula y concatenar si no esta vacio
Scripting
Rosa1010 1 7,970 Último mensaje 29 Enero 2024, 08:04 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines