Aryuda con arrays con strings

Iniciado por Mozzard, 10 Enero 2019, 22:13 PM

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

Mozzard

Hola buenas este es un ejercicio de una pagina...
Ya me he pasado rato intentando ver como funciona esto pero no me salgo.
Lo que pide es que primero entres el numero de palabras que entraras en el programa, y despues de escribir cada palabra te escribe en pantalla los caracteres de las palabras que esten en la posicion de los numeros pares del array, y los de los numeros impares separados.
Pues este es el codigo, me pone error donde fgets(s), gracias!
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int t,n=0;
    vector<char>s;
    cin>>t;
    for(int i=0;i<t;i++){
        fgets(s);
        for(int j=sizeof(s)/sizeof(*s);n<j;n++){
            if(s[n]%2==0){
                cout<<s[n];
            }
        }
        n=0;
        cout<<" ";
        for(int j=sizeof(s)/sizeof(*s);n<j;n++){
            if(s[n]%2!=0){
                cout<<s[n];
            }
        }
    }
   
    return 0;
}
Programalo... sin miedo...

K-YreX

Los vectores de la stl no se usan así. Mírate en cualquier sitio cómo funciona un vector y cómo funciona la función <fgets()>. Tienes que crear una variable auxiliar y después meterla en el vector, a grandes rasgos...

PD: Creo que estás interpretando mal el ejercicio, un array de palabras es un array de <string>, no de <char>. Has creado un vector de caracteres, no se palabras.

Aparte de eso, aunque el <for> se puede usar como lo estás usando en ese código, no es muy correcto. De todos modos el error más grave es el tipo del vector, miratelo a ver. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Beginner Web

#2
Código (cpp) [Seleccionar]
int main()
{
char palabra[]="salchicha", auxiliar[32];
int i, j=0;
for(i=0;i<strlen(palabra);i++){
if(i%2==0)
cout<<palabra[i];
else{
auxiliar[j]=palabra[i];
j++;
}
}
auxiliar[j]='\0';
cout<<" "<<auxiliar<<endl;
system("pause");
}
7w7

Mozzard

Cita de: Beginner Web en 11 Enero 2019, 05:50 AM
Código (cpp) [Seleccionar]
int main()
{
char palabra[]="salchicha", auxiliar[32];
int i, j=0;
for(i=0;i<strlen(palabra);i++){
if(i%2==0)
cout<<palabra[i];
else{
auxiliar[j]=palabra[i];
j++;
}
}
auxiliar[j]='\0';
cout<<" "<<auxiliar<<endl;
system("pause");
}

Puedes explicar estas lineas pls? Gracias!
auxiliar[j]='\0';
cout<<" "<<auxiliar<<endl;
system("pause");
Programalo... sin miedo...

K-YreX

Una cadena de caracteres de tipo C, es decir, una variable char*, acaba cuando encuentra el caracter '\0'. Por ejemplo:

char *palabra = "hola"; // internamente se ha guardado hola\0

Si creas una cadena ingresando caracteres como en ese bucle, tienes que ingresar al final el caracter de final de cadena '\0'. Los métodos de copia <strcpy()> <strncpy()> y de entrada <gets()> <fgets()> etc ya hacen ellos eso y no tienes que preocuparte de ello. Sólo tienes que hacerlo si ingresas los caracteres "manualmente".

La siguiente línea es simplemente para mostrar la variable por pantalla. Y la última línea es para hacer una pausa y que no se cierre la pantalla del terminal cuando ejecutas el programa. El <system("pause")> es una mala práctica que se recomienda sustituir por <getchar()> en C (incluido en <stdio.h>) y <cin.get()> en C++ (incluido en <iostream>).
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;