Ayuda con ejercicios de C-Style strings

Iniciado por RM_85, 9 Abril 2020, 18:02 PM

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

RM_85

Tengo un programa donde necesito pedir los apellidos y nombres y guardarlos en una sola variable de tipo c-style string pero no se como poner el caracter null al final de la cadena y como mostrar unicamente los apellidos y no los nombres. Opte por usar una estructura y hasta aca llego....

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>


using namespace std;

void pedirDatos();

void mostrarApellido();


struct Personas{

char nombreApellido[30];


}persona[10];



int main(int argc, char *argv[]) {


pedirDatos();

mostrarApellido();


return 0;
}



void pedirDatos(){

for(int i = 0; i < 10; i++){

cout << " Ingrese apellido y nombre separado por un espacio: ";

cin.getline(persona[i].nombreApellido, 30, '\n');



}


}

void mostrarApellido(){

int i = 0, k = 0, contador = 0;


cout << "\n\n Apellidos introducidos: \n\n ";


for(; i < 10; i++){


for(int k = 0; k < 30; k++){


{


cout  << i+1 << " - " << persona[i].nombreApellido[k] << "\n";
 
 }


}


}



}

}

ThunderCls

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>

using namespace std;

void pedirDatos();
void mostrarApellido();

struct Personas {
    char nombreApellido[30];
}
personas[10];

int main(int argc, char * argv[]) {
   
    memset(personas, 0, sizeof(personas) * 10); // usa memset para inicializar la estructura con ceros
    pedirDatos();
    mostrarApellido();

    return 0;
}

void pedirDatos() {
    for (int i = 0; i < 10; i++) {
        cout << " Ingrese apellido y nombre separado por un espacio: ";
        cin.getline(personas[i].nombreApellido, 30);
    }
}

void mostrarApellido() {

    int i = 0, k = 0, contador = 0;
    cout << "\n\n Apellidos introducidos: \n\n ";

    for (; i < 10; i++)
    {
        char *token = strtok(personas[i].nombreApellido, " "); // usa strtok para dividir la cadena por el espacio y obtener los tokens
        if(token && (token = strtok(nullptr, " ")) != nullptr)
        {
            cout << i + 1 << " - " << token << "\n";
        }
    }
}


Solo he añadido las dos lineas que necesitas basicamente, por otra parte, tu codigo no es el mejor  :-\
Saludos
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

RM_85

Hola ThunderCls te agradezco la ayuda pero necesitaba una forma mas simple de resolverlo. Saludos.

ThunderCls

Cita de: RM_85 en  9 Abril 2020, 21:21 PM
Hola ThunderCls te agradezco la ayuda pero necesitaba una forma mas simple de resolverlo. Saludos.

Mas simple?! Pero si solo le he añadido dos lineas a tu codigo  :xD
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

RM_85

No son la cantidad de lineas de codigo sino lo que significan, y por que tendria que saberlo??? :huh: