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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 7


Ver Perfil
cadenas
« en: 10 Febrero 2012, 23:12 pm »

necesito ayuda con estos problemas de la forma mas simple posiblehttp://imageshack.us/photo/my-images/714/cadenastarea.jpg/


En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
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 Desconectado

Mensajes: 7


Ver Perfil
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 Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
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:

Código
  1. while(palabra[i]){
  2.    if(palabra[i]==' ')
  3.        printf("\n");
  4.    else
  5.        printf("%c", palabra[i]);
  6.  
  7.    i++;
  8. }

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 Desconectado

Mensajes: 7


Ver Perfil
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 Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
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)

Código:
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 Desconectado

Mensajes: 1.639


Ver Perfil
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 Desconectado

Mensajes: 7


Ver Perfil
Re: cadenas
« Respuesta #7 en: 14 Febrero 2012, 15:49 pm »

gracias broders, ya me salieron todos los problemas.
saludos!  :D
En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separación en cadenas
Programación Visual Basic
yeikos 4 1,839 Último mensaje 10 Septiembre 2005, 06:00 am
por EstoyBaneado
Cadenas...
Programación Visual Basic
programatrix 3 2,317 Último mensaje 30 Diciembre 2005, 22:13 pm
por programatrix
cadenas y funciones
Programación C/C++
ALONSOQ 4 2,116 Último mensaje 7 Agosto 2012, 15:05 pm
por X3R4CK3R
Cadenas c++
Programación C/C++
jaimeramirez10 3 2,337 Último mensaje 11 Junio 2013, 16:38 pm
por CCross
Ordenas cadenas en C?
Programación C/C++
Geckored 1 1,594 Último mensaje 26 Noviembre 2014, 06:58 am
por MeCraniDOS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines