Cortar tira de caracteres en C++

Iniciado por raquelsg88, 20 Octubre 2011, 10:52 AM

0 Miembros y 1 Visitante están viendo este tema.

raquelsg88

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

satu

#1
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
Breakbeat como forma de vida

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

dewolo

para cortar una cadena se trata solo de insertar un cero en una posicion del vector...

darkvidhack

busca sobre la función 'substr', es para 'extraer' cadenas de otras cadenas ;)

Saludos
live and let die

la duda es la base de todo conocimiento

raquelsg88

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();   
   
   
}

do-while

¡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/

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Riki_89D

#7
Y con un bucle for?¿

Código (cpp) [Seleccionar]

#include "iostream"


void Obtener_Tira(char txt[255],int num)
{
char Buff[255];
memset(Buff,0,255);
for(int n = 0; n != num; n++)
{
Buff[n] = txt[n];
}

std::cout << "La cadena cortada es: " << Buff <<std::endl;
getchar();
}

int main(void)
{

Obtener_Tira("Holaaaa buenos dias",9);

return 0;
}



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

rir3760

Cita de: raquelsg88 en 24 Octubre 2011, 23:00 PMHe 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:
puts("Introduce la cadena de caracteres:");
fgets(tira, 25, stdin);

puts("Introduce un numero:");
if (scanf("%d", &n) == 1 && n >= 0 && n < 25)
   tira[n]='\0';


----

Cita de: Riki_89D en 24 Octubre 2011, 23:35 PM
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
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

s00rk

No seria mas sencillo hacer un recorrido?

ejemplo:

Código (c++) [Seleccionar]

string palabra = "";
    int n = 0;
    cout << "Ingresa Palabra: ";
    cin >> palabra;
    cout << "Ingresa Numero: ";
    cin >> n;
    if(n > palabra.size())
    {
          cout << "El numero ingresado es mayor al total de caracteres en la palabra";
    }else{
          for(int x = 0; x < n; x++)
          {
                  cout << palabra[x];
          }
    }


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.