ayuda con las cadenas

Iniciado por piyor6, 14 Abril 2018, 19:59 PM

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

piyor6

buenos dias tardes o noches amigos tengo un problema con un ejercicio en c++ tengo que determinar en un vector una cantidad de personas y preguntarle si es discapacitada o no(f/v) hasta hay todo facil pero la duda mia es como hago para pasar la persona discapacitada si el ususario ingreso v
como copio una cadena en otra con la libreria string.h (el profesor no deja hacerlo con string.h)

ESTE SERIA EL CODIGO CON LA LIBRERIA PERO NECESITO SIN ESA LIBRERIA AYUDAAAA   

Y si algun programador me puede dar su whatsApp para preguntarle dudas direnctamente, muchas gracias


#include <stdlib.h>
#include <stdio.h>
#include<string.h>
//estructura
struct persona{
char nombre[20];
char discapacidad='v';
}personas[30],personaconD[30],personasinD[30];

int numpe,j=0,k=0;
void llenar_personas();
void imprimir();



int main(){
llenar_personas();
imprimir();
    return 0;
}

//llenar las personas
void llenar_personas(){
printf("ingrese el numero de personas: ");
scanf("%d",&numpe);
for(int i=0;i<numpe;i++){
fflush(stdin);
printf("-------------------------------\n");
printf("PERSONA #%d\n",i+1);
printf("nombre: ");
fgets(personas.nombre,30,stdin);
printf("discapacidad(f/v): ");
scanf("%s",&personas.discapacidad);
fflush(stdin);

//sacando personas discapacitadas (AQUI ESTA MI DUDA)
if(personas.discapacidad=='v'){
    strcpy(personaconD[j].nombre,personas.nombre);
    j++;
}
//sacando personas sin discapacidad(Y AQUI)
if(personas.discapacidad=='f'){
    strcpy(personasinD.nombre,personas.nombre);
    k++;
}
}
}
//imprimir las peronas
void imprimir(){
printf("-------------------------------\n");
printf("PERSONAS CON DISCAPACIDAD\n");
for(int i=0;i<numpe;i++){
    printf("%s",personaconD.nombre);
}
printf("-------------------------------\n");
printf("PERSONAS SIN DISCAPACIDAD\n");
for(int i=0;i<numpe;i++){
    printf("%s",personasinD.nombre);
}

printf("-------------------------------\n");
}

Kenji-chan

con la función
int sprintf(char *str, const char *format, ...)
de la biblioteca <stdio.h>
puedes copiar un string con formato a un char*

MAFUS

Hazte tu propia strcpy
char* strcpy(char *destino, const char* origen) {
    register unsigned long long i = 0;
    register char c;
   
    for(i=0; (c=origen[i]) != '\0'; ++i)
        destino[i] = c;
       
    destino[i] = '\0';
   
    return destino;
}


Como la original, ésta no tiene protección contra desbordamiento de buffer.

piyor6

no puedo usar funciones en el codigo osea si puedo crear mis propias funciones pero no puedo usar librerias para llamar mas funciones ayudame a escribir el codigo de una funcion que se llame copiar y que copie una cadena a otra vacia
al aso como
copiar(char destino,char origen,int num);
muchas gracias

Kenji-chan

la función que te a propuesto MAFUS es una función creada por el, lo único que tiene el nombre de una función ya conocida, pero si pones esa función en tu código y quitas el include de <string.h> te funcionara conmo quieres, pero como ya dijo el
Citarésta no tiene protección contra desbordamiento de buffer
eso tendras que arreglarlo

piyor6




ok, copie todo el codigo y tambien hice la estructura de la funcion y borre el string.h y asi estoy usando la funcion que cree y me tira error


for(int i=0;i<numpe;i++){
//sacando personas discapacitadas
if(personas[i].discapacidad=='v'){
  strcpy(personaconD[i],numpe,personas[i].nombre);
}
   
}
PDT:subiria una imagen del error pero no se subir imagenes

Yuki

Cita de: piyor6 en 15 Abril 2018, 02:16 AM


ok, copie todo el codigo y tambien hice la estructura de la funcion y borre el string.h y asi estoy usando la funcion que cree y me tira error


for(int i=0;i<numpe;i++){
//sacando personas discapacitadas
if(personas[i].discapacidad=='v'){
  strcpy(personaconD[i],numpe,personas[i].nombre);
}
   
}
PDT:subiria una imagen del error pero no se subir imagenes

Estableces 3 argumentos a strcpy.

piyor6

podrias ser mas claro sobre que tengo que hacer para que funcione

Kenji-chan

cuando llamas a la funcion le pasas 3 parametros cundo esta solo admite 2
strcpy(personaconD,numpe,personas.nombre);
el numpe esta de mas