PI-ITBA / 2024_02

Consultas 2C 2024
4 stars 0 forks source link

Ejercicio 2 Parcial 13/04/2018 #28

Open mipipet opened 2 months ago

mipipet commented 2 months ago

Hola!! Estaba haciendo el segundo ejercicio del primer parcial del primer cuatrimestre de 2018 y no me imprimen nada los printf, pero cuando pongo asserts para ver si lo que hay en los strings guardados, estos corren sin problema. Será algo que tenga que ver con mi función? Les dejo la consigna. Desde ya muchas gracias!!

image


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

#define LETRAS ('Z' - 'A' + 1)

void letras(char * s1, char * s2); 

int
main(void) {
    char s[LETRAS + 1];
    letras("Abracadabra Pata De Cabra", s);
    printf("%s\n", s); // Imprime ABCDEPRT o abcdeprt
    assert(strcmp(s,"abcdeprt"));

    letras("123456 ()", s);
    printf("%s\n", s); // Imprime una línea en blanco
    assert(strcmp(s," "));

    letras("1x234ZxZ56 ()0x", s);
    printf("%s\n", s); // Imprime XZ o xz
    assert(strcmp(s,"xz"));

    printf("OK!\n");

    return 0;
}

void letras(char * s1, char * s2){
    char c; 
    for(int i=0; s1[i]; i++){
        if(c=(tolower(s1[i]))>='a' && c<='z'){
            s2[s1[i]]=c; 
        }
    }
    s2[LETRAS]=0; 
    return; 
}
marcelogarberoglio commented 2 months ago

El problema es que estás colocando las letras en posiciones incorrectas. Por ejemplo si aparece la 'a' hacés s2['a'] = 'a', que es lo mismo que hacer s2[97] = 'a' Además estarías dejando huecos, ya que si no aparece la B pero sí la C en s2[98] queda basura y en s2[99] dejás la 'C' Acordate que además podés usar isalpha