Array alternato

di il
5 risposte

Array alternato

Ciao a tutti
Ho un problema con questo esercizio in C: date in input due parole di uguale lunghezza ottenere in output una parola con i caratteri delle parole date alternati.
Esempio: a=cane , b=lupo ---> c=claunpeo
Questo è il mio codice

#include <stdio.h>
#include <string.h>
#define MAX 100
#define min(n,m) (n<=m)?n:m
int main(){
    char a[MAX],b[MAX],c[MAX];
    int i,k;
    printf("Inserisci una parola: ");
    gets(a);
    printf("Inserisci una parola: ");
    gets(b);
    int n=strlen(a);
    int m=strlen(b);
    for(i=0;i<=min(n,m)+2;i=i+2){
        k=i/2;
        c[i]=a[i-k];
        c[i+1]=b[i-k];
        }
    c[i]='\0'; 
    printf("\n%s",c);
return(0);
}
Non capisco perchè dopo avermi fatto inserire le due parole non mi stampa c

5 Risposte

  • Re: Array alternato

    Sicuramente ci sono due errori

    In primo luogo devi scrivere
    #define min(n,m) ((n<=m)?n:m)
    altrimenti, senza le parentesi nel for hai:
    for(i=0;i<=(n<=m)?n:m+2;i=i+2){
    Il secondo errore è che lo zero terminatore di stringa è zero davvero, non il carattere:
    c[i]='\0';
  • Re: Array alternato

    Grazie mille ora funziona
  • Re: Array alternato

    @Weierstrass sei caduto sull'uccello, come disse il buon vecchio Mike (ma sembra sia una leggenda metropolitana )

    Il carattere
    
       '\0'
    
    vale ESATTAMENTE ZERO! Cioe'
    
       0 == '\0'
    
    e' VERO
  • Re: Array alternato

    migliorabile ha scritto:


    @Weierstrass sei caduto sull'uccello, come disse il buon vecchio Mike (ma sembra sia una leggenda metropolitana )

    Il carattere
    
       '\0'
    
    vale ESATTAMENTE ZERO! Cioe'
    
       0 == '\0'
    
    e' VERO
    Ha corretto mentre stavo postando, ma secondo te non lo so?
  • Re: Array alternato

    Ciao CariCari,
    se lo hai fatto funzionare da solo, bravo.
    Ma mi pare un tantino complesso. Premesso che l'importante e' che funzioni, io farei:
                                             
    /*
     * (C)2019  IProgrammatori.it
     *
     * Il programma che non troverai con google.
     *
     * In Linux:   gcc main.c -o mescola
     */
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char **argv)
    {
            int i;
            char *parola1, *parola2;
    
            if (argc != 3) {
                    printf("usage: mescola parola1 parola2\n");
                    return -1;
            }
    
            parola1 = argv[1];
            parola2 = argv[2];
    
            if (strlen(parola1) != strlen(parola2)) {
                    printf("lunghezze devono essere uguali\n");
                    return -1;
            }
    
    
            for (i = 0; i < strlen(parola1); ++i)
                    printf("%c%c", parola1[i], parola2[i]);
    
            printf("\n");
    
            return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte