Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raquelsg88 en 20 Octubre 2011, 10:52 am



Título: Cortar tira de caracteres en C++
Publicado por: raquelsg88 en 20 Octubre 2011, 10:52 am
Hola, necesito ayuda para hacer un programita, me piden lo siguiente:

Escribe una función que reciba una tira de caracteres y un número entero, y obtenga la tira cortada hasta ese número de caracteres.

Por ejemplo, si el usuario escribe "hola" y un "2", el resultado sea "ho".

No tengo muy claro de como empezar porq soy nueva en esto, utilizo el programa dev c++.

Espero q podais ayudarme


Título: Re: Cortar tira de caracteres en C++
Publicado por: satu en 20 Octubre 2011, 14:57 pm
Hola

Aquí no se hacen tareas, léete las normas del foro, pero te voy a orientar para que puedas empezar. Luego si tienes dudas concretas las preguntas.

Lo que tienes que hacer es:

char cadena[50] //por ejemplo de 50 caracteres
int numero
leer cadena
leer numero
cadena[numero] = '\0'

Así de fácil es. Ahora inténtalo y nos pones las dudas que tengas

Saludos


Título: Re: Cortar tira de caracteres en C++
Publicado por: do-while en 21 Octubre 2011, 00:34 am
¡Buenas!

La respuesta a tu pregunta esta en la estructura de las cadenas de caracteres en C. Si miras las codiciones que tiene que cumplir un vector de caracteres para considerarse cadena, sabras como truncar la cadena que te den en la posicion que quieras.

Resumiendo, investiga sobre lo que es una cadena de caracteres en C.

¡Saludos!


Título: Re: Cortar tira de caracteres en C++
Publicado por: dewolo en 21 Octubre 2011, 01:58 am
para cortar una cadena se trata solo de insertar un cero en una posicion del vector...


Título: Re: Cortar tira de caracteres en C++
Publicado por: darkvidhack en 21 Octubre 2011, 19:51 pm
busca sobre la función 'substr', es para 'extraer' cadenas de otras cadenas ;)

Saludos


Título: Re: Cortar tira de caracteres en C++
Publicado por: raquelsg88 en 24 Octubre 2011, 23:00 pm
He hecho esto y si me corta la palabra, pero a nada que escriba una frase, los espacios no los coge y se keda colgado el programa, q puedo hacer?

#include <stdio.h>
#include <string.h>



main()
{
    char tira[25];
    int n;
    printf("Introduce la cadena de caracteres: ");
    scanf("%s",tira);
    printf("Introduce un número: ");
    scanf("%d",&n);
   
    tira[n]='\0';
   
    printf("\nLa tira cortada es %s",tira);
   
    printf("\n\n");   
    printf("Pulse una tecla para finalizar");
   
    getchar();
    getchar();   
   
   
}


Título: Re: Cortar tira de caracteres en C++
Publicado por: do-while en 24 Octubre 2011, 23:04 pm
¡Buenas!

scanf lee cadenas hasta que encuentra el primer caracter de tipo espacio en banco. Por eso no vas a poder leer frases utilizandola, prueba a utilizar fgets:

http://www.cplusplus.com/reference/clibrary/cstdio/fgets/ (http://www.cplusplus.com/reference/clibrary/cstdio/fgets/)

¡Saludos!


Título: Re: Cortar tira de caracteres en C++
Publicado por: Riki_89D en 24 Octubre 2011, 23:35 pm
Y con un bucle for?¿

Código
  1. #include "iostream"
  2.  
  3.  
  4. void Obtener_Tira(char txt[255],int num)
  5. {
  6. char Buff[255];
  7. memset(Buff,0,255);
  8. for(int n = 0; n != num; n++)
  9. {
  10. Buff[n] = txt[n];
  11. }
  12.  
  13. std::cout << "La cadena cortada es: " << Buff <<std::endl;
  14. getchar();
  15. }
  16.  
  17. int main(void)
  18. {
  19.  
  20. Obtener_Tira("Holaaaa buenos dias",9);
  21.  
  22. return 0;
  23. }
  24.  
  25.  

en este caso el programa devuelve "Holaaaa b" (asta el 9 caracter por que es un 9 el numero ingresado :=))

y para recojer el texto tengo entendido que gets() va muy bien,yo uso "cin" aun que este no va tan bien,hay que vaciar siempe el buffer!

saludos


Título: Re: Cortar tira de caracteres en C++
Publicado por: rir3760 en 25 Octubre 2011, 05:15 am
He hecho esto y si me corta la palabra, pero a nada que escriba una frase, los espacios no los coge y se keda colgado el programa, q puedo hacer?
Como ya te comento do-while debes utilizar fgets y tambien debes verificar que el numero indicado po el usuario (la posicion) sea menor que 25:
Código
  1. puts("Introduce la cadena de caracteres:");
  2. fgets(tira, 25, stdin);
  3.  
  4. puts("Introduce un numero:");
  5. if (scanf("%d", &n) == 1 && n >= 0 && n < 25)
  6.   tira[n]='\0';

----

Y con un bucle for?¿

...

en este caso el programa devuelve "Holaaaa b" (asta el 9 caracter por que es un 9 el numero ingresado :=))

y para recojer el texto tengo entendido que gets() va muy bien,yo uso "cin" aun que este no va tan bien,hay que vaciar siempe el buffer!
Si revisamos con cuidado el programa de raquelsg88 este es en lenguaje C.

Hay varios problemas con la solucion que propones: en C++ es un error modificar una cadena literal (la cadena "Holaaaa buenos dias") y no se aconseja el uso de la funcion gets (eso se describe a detalle en los temas fijos del foro).

Un saludo


Título: Re: Cortar tira de caracteres en C++
Publicado por: s00rk en 25 Octubre 2011, 08:16 am
No seria mas sencillo hacer un recorrido?

ejemplo:

Código
  1. string palabra = "";
  2.    int n = 0;
  3.    cout << "Ingresa Palabra: ";
  4.    cin >> palabra;
  5.    cout << "Ingresa Numero: ";
  6.    cin >> n;
  7.    if(n > palabra.size())
  8.    {
  9.          cout << "El numero ingresado es mayor al total de caracteres en la palabra";
  10.    }else{
  11.          for(int x = 0; x < n; x++)
  12.          {
  13.                  cout << palabra[x];
  14.          }
  15.    }

Bueno se me hace mas sencillo y corto y a la vez checamos que el numero ingresado no sea mayor a la cantidad de caracteres que contiene el string.