Ayuda con programa de c++

Hola gente!!!
Resulta que hace unas semanas me encargaron en la universidad un trabajo de c++ , me he tirado muchas horas intentado hacerlo pero no entiendo nada y lo poco que he hecho no me ha funcionado.
Si alguien de este foro entiende un poco de programacion me podria ayudar???
Le estaria muy agradecido , no digo que me lo haga solo algun trozo que me pueda ayudar .
El programa consiste en :

Se trata de confeccionar un programa en el que el usuario debe introducir una frase, de menos de 20 letras, y que acabe en punto, para después realizar una serie de acciones sobre la frase.

Estas son las acciones (funciones) que deberá hacer el programa, mediante un menú:

1. Convertir la frase a mayúsculas
2. Convertir la frase a minúsculas
3. Convertir la frase a oración
4. Contar el número de apariciones que tiene una letra (se le pide al usuario) en la frase.

A tener en cuenta:

En el programa, no se podrán utilizar variables globales, y las funciones deberán usar el paso por referencia.

Si el usuario escribe una frase de más de 20 letra, automáticamente el programa sustituirá la última posición del vector por un punto.

Las letras mayúsculas de las minúsculas, en el código ASCII difieren en 32 posiciones
tienes alguna duda concreta o no tienes ni idea?

podrías empezar por mirarte alguna referencia de los operadores de strings
de teoria se de c++ , que es lo que damos pero de hacerlo me vuelvo loco en este programa lo unico que he podido conseguir es hacer el menu ( facil lo se ) , quiero empezar por lo de las mayusculas pero no se como.
Que alguien me ayude que he de entregarlo esta semana.
gracias
Utiliza estas funciones creo que no necesitas nadamas... http://www.conclase.net/c/librerias/lib ... lib=string

hace tiempo me dejaron algo parecido en ensamblador [mad] [mad] [mad]

salu2
Btw, convertir frase a oración? Poner sólo la primera letra en mayúscula? Y si el usuario pone "Le dejo la moto a Pepe", la cambia a "Le dejo la moto a pepe"?

Me encantan estas prácticas de universidad inútiles :P....
DemonR escribió:Btw, convertir frase a oración? Poner sólo la primera letra en mayúscula? Y si el usuario pone "Le dejo la moto a Pepe", la cambia a "Le dejo la moto a pepe"?

Me encantan estas prácticas de universidad inútiles :P....


te refieres a que es facil o dificil , yo es que no entiendo lo que quieres decir con la moto de pepe [ginyo]

Si me ayudas...quizas lo entiendo.
gracias de todas formas
Nunca he hecho nada de c++, pero estoy seguro que existen funciones de tratamiento de cadenas como en todos los lenguajes.

De todos modos, yo empezaria por hacer un explode, o lo que quieras...para tener un array (vector) con cada una de las letras.

Para pasarlo a mayusculas...lo mas facil seria un switch case, o mas elegante, haces un casting de esa letra a entero, miras si está en el rango de las minusculas, le sumas la diferencia (dices que 32) hasta las mayusculas, y haces de nuevo el casting a char. Luego simplemente recorres el array, concatenandolo para rehacer la cadena, o seguro que hay alguna funcion toString.

Para las minusculas lo mismo.

Lo de la oracion no lo entiendo

Contar las apariciones de una letra. Suponemos que nos da igual mayusculas que minusculas, asi que primero lo pasamos todo a mayusculas por ejemplo, y luego recorremos el array aumentando un flag.

Si no me he explicado bien avisa y vemos q se puede hacer.

Saludos
j88 escribió:
DemonR escribió:Btw, convertir frase a oración? Poner sólo la primera letra en mayúscula? Y si el usuario pone "Le dejo la moto a Pepe", la cambia a "Le dejo la moto a pepe"?

Me encantan estas prácticas de universidad inútiles :P....


te refieres a que es facil o dificil , yo es que no entiendo lo que quieres decir con la moto de pepe [ginyo]

Si me ayudas...quizas lo entiendo.
gracias de todas formas


Na, me referia a que si "convertir frase a oración" era dejar todo en minúsculas excepto la primera letra? Si es así me parece un poco tontería...
Haber en la libreria String lo tienes todo, ademas lo unico que tienes que hacer es print(variable.tolower()); o similares
suelen ser toupper() o touppercase() y capitalize() que es la de la oracion.
Estas funciones son de javascript, pero vamos que seran muy similares en c++, es muy facil, pero hombre no te lo van a dar masticado, mirate la referencia que te han pasado y en 5 min lo sacas ;)

Edito, vale nose ahora seguro si esto te valdria, en C# seguro pero en C++ al ser mas antiguo nose.
La solucion alternativa seria pasarlo a array y creo que para hacer las letras grandes es sumarle 60 (por el codig ascii vamos que a poco que te lo mires lo entenderas), para hacerlas pequeñas la restas y para printarla en pantalla pues o lo pasas a sting o lo printas letra por letra con un for(){}
Mirando un poco por encima C++ (ya que yo estudie C), veo mas o menos que para pasar una cadena a Mayusculas tienes:

variable = variable -> ToUpper();

Esto es asi en Visual C++, que en C++ normal ya no se, pero algo por el estilo será. Con eso ya tendrias una de las funciones solventada, las demas investiga mas metodos de String, que es facil.

Saludos [bye]
exar escribió:Mirando un poco por encima C++ (ya que yo estudie C), veo mas o menos que para pasar una cadena a Mayusculas tienes:

variable = variable -> ToUpper();

Esto es asi en Visual C++, que en C++ normal ya no se, pero algo por el estilo será. Con eso ya tendrias una de las funciones solventada, las demas investiga mas metodos de String, que es facil.

Saludos [bye]

Hombre, por el enunciado no parece que quieran que los alumnos tiren de esa función, sino que recorran la frase caracter por caracter y sumarle o restarle 32 posiciones cuando sea necesario para hacer las funciones. Si está empezando, es normal que primero le hagan trabajar a un nivel un poco más bajo.
Ryucho escribió:Hombre, por el enunciado no parece que quieran que los alumnos tiren de esa función, sino que recorran la frase caracter por caracter y sumarle o restarle 32 posiciones cuando sea necesario para hacer las funciones. Si está empezando, es normal que primero le hagan trabajar a un nivel un poco más bajo.


No, si tambien habia pensado en ello, pero como es tan poco especifico, primero vamos a lo "facil" [+risas]
Te he hecho un ejemplo en c++ para que de ahí saques tu ejercicio (si no te esfuerzas tú no va a servir de nada):

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

//Entradas:
cout << "Cadena de texto a ser analizada:\n" ;
string cadena_texto ; // Como ejemplo vamos a usar 'hola'
cin >> cadena_texto ; // Almacena en 'cadena_texto' el texto que escriba en pantalla hasta pulsar enter.

//Cómputos:

// Aquí podrías usar un bucle for, para recorrerte el array cadena_texto modificando cada elemento si así fuese necesario (es decir, usando un if).

//Salidas:
cout << "Salidas:" << "\n" ;
cout << cadena_texto[0] ; // Esto imprime 'h' (sobre el ejemplo 'hola')
cout << char( cadena_texto[0]+1) << "\n" ; // Esto imprime 'i' (carácter posterior a 'h')

cout << int(cadena_texto[0]) << "\n" ; // Esto imprime '104', mira la tabla ascii que te adjunto.
cout << char( cadena_texto[0]-32) << "\n" ; // Esto imprime 'H' (si hemos escrito 'hola')

system("PAUSE");
return EXIT_SUCCESS;
}



Hay mil maneras de hacerlo, pero bueno, aquí tienes una a bajo nivel que sí que te vale.

Te explico un poco por encima:

Un string es una concatenación de caracteres (un vector). Al hacer "cin" sobre la variable string, se almacenarán esa sucesión de caracteres en el vector y como última posición se escribirá "/0", así al manejarlo sabrás cuando termina esa sucesión de caracteres.

En nuestro ejemplo sería:
String cadena_caraceteres: h o l a '/0'

Ahora, cada carácter, es un carácter ASCII, el cual está identificado por un número entero, por ejemplo el carácter h está referenciado por el valor ASCII 104.

Sabiendo esto, ya no deberías tener problema en construir el programa.

Imagen

Otra cosa,

cuando hacemos char ( int x) -> lo que hacemos es un casting, es decir, una reconversión de tipos. Es decir, si la variable x vale 41, nos vamos a la tabla ASCII y se muestra el carácter con identificador 41, es decir: )

¡Espero que te sirva! [beer]

Edito: Entendiendo esto, y creando para cada ejercicio sus respectivas funciones, puedes hacer el 1,2 y 4. Con el tercer apartado no sé a qué te refieres... si lo aclaras, estaremos encantados de ayudarte :) .
ejemplo en C (improvisado, no se si ira pero bueno XD)
Supongamos que en el codigo ascii, la diferencia entre mayusculas y minusculas sea de 20 numeros

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void menu ()
{
printf ("Menu bla bla bla");
}
void mayusculasminusculas (char cadena[])
{
char solucion[15] // 15 por un valor aceptable
x=strlen(cadena);
int cont;
for (cont=x; cont<=0; cont--)
{
cadena[cont]=solucion[cont-20];
}
puts(solucion);
}
}
void minusculasmayusculas (char cadena [])
{
int solucion[15];
x=strlen(cadena);
int cont;
for (cont=x; cont<=0; cont--)
{
cadena[cont]=solucion[cont+20];
}
puts(solucion);
}

int main ()
{
char cadena [20];
int opcion;
menu ();
switch (opcion);
case 1:
printf ("frase");
gets (cadena);
mayusculasaminusculas(cadena);
break;
etc etc etc
funcion de mayusculas a minusculas:

void mayus (char array[])
{
int i=0;
do
{
array[i]+=32;
i++;
}
while (array[i]!='\0');

}

función para pasar a mayuscula:
void minus (char array[])
{
int i=0;
do
{
array[i]-=32;
i++;
}
while (array[i]!='\0');

}


función para contar letras

int contar (char array[], char car)
{
int i=0, cont;
do
{
if (array[i]== car) cont++;
i++;
}
while (array[i]!='\0');

return cont;
}

La otra función de pasar la oracion a frase o algo asi no la entiendo :-?
muchas gracias por la ayuda , me funciona pero a la hora de compilar me da unos pocos errores sobre todo de identificadores no declarados , que los tengo declarados.
Claro yo el menu lo tenia hecho ( casi solo eso , porke el programa se traia las suyas) y a la hora de poner el vuestro pos he tenido que cambiar identificadores y no me tira , pero seguire haciendo.
si me quereis seguir ayudando estare encantado.
Jeje, esa práctica también la tuve yo, si te organizas como te enseñan en clase (diagramas sobre todo) es sencilla.

Si quieres dedicarte a la programación ponte las pilas, puesto que cuando sepas algo mas verás que este problema es mas una mini-piedra que otra cosa.

Y un consejo, no te pongas a picar código de buenas a primeras, planifícate bien lo que quieres hacer, así minimizas el número de errores y en todo momento sabes por donde andas.
no me gustaria dedicarme a la programacion , quixzas es lo que mas me cuesta , asi que intento aprender lo minimo psara aprobar y listo.
Entiendi que es una asignatura importante , pero le pongo ganas.
Por cierto recuerdas la practica esa si la tenias hecha??? para pasarmela jejeje.
Sino ayudarme que mas o menos voy teniendo la idea clara pero muy poco.
grscias gente...
17 respuestas