Autor
|
Tema: cadenas (Leído 5,191 veces)
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
|
Re: cadenas
« Respuesta #1 en: 11 Febrero 2012, 01:54 am » |
|
No dices si lo haces en C o en C++... esa no es manera de pedir ayuda.
Una idea general.
Ejercicio 1:
Simplemente es "justificar" (por decirlo de alguna forma) una cadena. Lees por teclado la cadena, recorres dicha cadena. Si es la primera letra de una palabra la pones a mayúscula, si no la pones en minúscula. Imprimes el resultado.
Ejercicio 2:
Recorres la cadena, cada vez que encuentres un espacio muestras la palabra que has leido hasta ese momento. Repites este proceso hasta llegar al final de la cadena y listo.
Ejercicio 3:
Puede hacerse de varías formas. Puedes coger recorrer la cadena y por cada carácter recorres desde el principio la cadena buscando el número de veces que está dicho carácter. No es la manera más eficiente pero para tener una idea te sobra.
Ejercicio 4:
Compruebas si el primer carácter es igual al último, el segundo al penúltimo, el tercero al antepenúltimo... etc. Si todas las comprobaciones son verdaderas, entonces es palindromo. Si la longitud de la cadena es impar habrá un caracter que se tendrá que comparar consigo mismo (el del centro).
Ejercicio 5:
Este no entiendo muy bien que es lo que hace.
Saludos.
|
|
|
En línea
|
|
|
|
johrdy
Desconectado
Mensajes: 7
|
|
Re: cadenas
« Respuesta #2 en: 11 Febrero 2012, 18:42 pm » |
|
disulpen ya bosqueje mas o menos el problema 2 pero tengo un inquietud, no se como hacer para que primero se imprima "prOblema" y luego "un".. aqui esta mi codigo en C, haber si me pueden hechar una mano #include <stdio.h> #define LOG 30 int main(){ char palabra[LOG+1]; int i=0; gets(palabra); printf("\n"); while (palabra!='\0'){ if (palabra==' ') printf("\n"); else printf("%c",palabra); i++; }
printf("\n");
return 0; }
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
|
Re: cadenas
« Respuesta #3 en: 11 Febrero 2012, 19:09 pm » |
|
El código que propones tiene el problema de que si meten por teclado una frase que contenga más de 30 caracteres se te va a salir del array y lo más probable es que casque el programa. Si aún así quieres hacerlo con eso porque tú eres quién va a introducir las frases y te asegurarás de que tienen menos de 30 caracteres sigo: puedes hacer lo siguiente en el bucle: while(palabra[i]){ if(palabra[i]==' ') else i++; }
Supongo que el haber cambiado el orden de problema y un será por error, ya que el ejercicio lo que parece querer hacer es imprimir cada palabra de la frase separada por un espacio en una línea distinta. Saludos.
|
|
|
En línea
|
|
|
|
johrdy
Desconectado
Mensajes: 7
|
|
Re: cadenas
« Respuesta #4 en: 13 Febrero 2012, 04:20 am » |
|
que raro al momento se copiar no se copio esos corchetes..bueno de todos modos gracias tengo un problema con el ejercicio 3, lo que pasa es que no se como hacer para que no se impriman las palabras ya contadas, mi codigo es el siguiente haber si me hechas una mano nuevamente... saludos! #include <stdio.h> #include<ctype.h> #include<string.h>
int contar(char frase[], char car); int i,j; int main()
{ char frase[100]; char car; int aparece; printf("Introduzca Frase: \n"); gets(frase); j=strlen(frase); while (frase){ /*Bucle que convierte la cadena a minusculas*/ frase=tolower(frase); /*tolower convierte las mayusculas en minusculas*/ i++; /*Recorremos toda la frase*/ } for(i=0;i<j;i++) { if(frase!=' '){ car = frase ; aparece=contar(frase, car); printf("%c=%d\n", car, aparece) } } return 0;
}
int contar(char frase[], char car) { int i=0, veces=0; while(frase!='\0'){ if(frase==car) veces++; i++; } return veces;
}
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
|
Re: cadenas
« Respuesta #5 en: 13 Febrero 2012, 23:32 pm » |
|
En lugar de hacer lo que has hecho podrías tener un array en el que cada posición representa una letra, la posición 0 la 'a', la 1 la 'b'...etc, el array será de enteros y mientras recorres la frase vas sumando los valores del array correspondientes. El código podría ser algo así: (te lo pongo en pseudocódigo para que tú lo hagas en C) CADENA frase; //Variable ENTERO array[27]; //Variable, posiciones para a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z inicializar(array); //Poner a 0 todas las posiciones del array LEER(frase); //leemos la frase de la entrada estandar toLower(frase); //Convierte la frase a minúscula PARA CADA caracter DE frase HACER array[caracter-97]++;
ImprimirArray(array); //Imprimimos los valores del array que sean distintos de 0 Lo de caracter-97 lo hacemos porque la 'a' en código ASCII tiene el valor decimal 97, por tanto restandole ese valor nos queda 0 (que es la posición que le habíamos asignado en el array). De esta forma solo tienes que recorrer una vez la frase y otra el array, que es tiempo constante. Al imprimir los valores solo debes deshacer el cambio, es decir, la posición 0 será la 'a', la posición 1 la 'b', etc e imprimiremos aquellas posiciones que sean distintas de 0. Un saludo.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
|
Re: cadenas
« Respuesta #6 en: 14 Febrero 2012, 03:29 am » |
|
Dos comentarios en buen plan (admito raya en lo pedante) sobre el pseudocodigo de Valkyr:
* Los caracteres en el rango 'a' .. 'z' son 26, el carácter 'ñ' es mejor evitarlo por problemático (mismo caso con las vocales acentuadas).
* En C puede utilizarse con el mismo efecto tanto el numero 97 como el carácter literal 'a', mejor (por claridad) el segundo.
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
|
|
|
johrdy
Desconectado
Mensajes: 7
|
|
Re: cadenas
« Respuesta #7 en: 14 Febrero 2012, 15:49 pm » |
|
gracias broders, ya me salieron todos los problemas. saludos!
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
|
Re: cadenas
« Respuesta #8 en: 14 Febrero 2012, 19:03 pm » |
|
Se me fue el dedo o la cabeza o las dos cosas xD. No quise tener en cuenta la Ñ, se que causa problemas (además ya no sería ASCII, sería... UFT-8???) al igual que las palabras acentuadas.
El segundo punto, no había caído en la cuenta de ponerlo de forma literal, llevas razón, se ve mucho más claro.
Un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Separación en cadenas
Programación Visual Basic
|
yeikos
|
4
|
1,820
|
10 Septiembre 2005, 06:00 am
por EstoyBaneado
|
|
|
Cadenas...
Programación Visual Basic
|
programatrix
|
3
|
2,297
|
30 Diciembre 2005, 22:13 pm
por programatrix
|
|
|
cadenas y funciones
Programación C/C++
|
ALONSOQ
|
4
|
2,082
|
7 Agosto 2012, 15:05 pm
por X3R4CK3R
|
|
|
Cadenas c++
Programación C/C++
|
jaimeramirez10
|
3
|
2,304
|
11 Junio 2013, 16:38 pm
por CCross
|
|
|
Ordenas cadenas en C?
Programación C/C++
|
Geckored
|
1
|
1,570
|
26 Noviembre 2014, 06:58 am
por MeCraniDOS
|
|