Lettura di una parola e incremento dell'array

di il
29 risposte

29 Risposte - Pagina 2

  • Re: Lettura di una parola e incremento dell'array

    Armen ha scritto:


    In pratica quando lo eseguo e inserisco una parola in input è come se si aspettasse (all'infinito) altri input. A cosa potrebbe essere dovuto?
    Le due for sono sbagliate. Dovrebbero essere semplicemente eliminate.

    L'unico ciclo corretto è il while e per arrivare all'elemento di indice corretto devi semplicemente usare il codice ASCII, che avrai sicuramente studiato.
  • Re: Lettura di una parola e incremento dell'array

    oregon ha scritto:


    Armen ha scritto:


    In pratica quando lo eseguo e inserisco una parola in input è come se si aspettasse (all'infinito) altri input. A cosa potrebbe essere dovuto?
    Le due for sono sbagliate. Dovrebbero essere semplicemente eliminate.

    L'unico ciclo corretto è il while e per arrivare all'elemento di indice corretto devi semplicemente usare il codice ASCII, che avrai sicuramente studiato.
    Va bene, grazie. Ci provo.
  • Re: Lettura di una parola e incremento dell'array

    Leggiti bene il mio primo messaggio.
    Credo di essere stato chiaro su come implementare la mappa
  • Re: Lettura di una parola e incremento dell'array

    Buona sera, ho modificato il codice cercando di seguire le vostre istruzioni e funziona.
    Nel caso qualcuno si dovesse ritrovare nella mia stessa situazione, questo è il codice:
    #include<stdio.h>
    #define N 26
    int main(void){
    
    char ch;
    int i,a[N]={0};
    
    printf("Inserisci una parola:");
    
    
    while((ch=getchar())!='\n')
    {i=ch-'a';
    a[i]=a[i]+1;}
    
    
    for( i=0; i < N; i++)
    printf("%d ", a [i]);
    printf("\n");
    
    
    
    return 0;
    }
    
  • Re: Lettura di una parola e incremento dell'array

    Ok anche se bastava

    a[ch-'a']++;

    Tieni presente che non funziona con le maiuscole.
  • Re: Lettura di una parola e incremento dell'array

    oregon ha scritto:


    Ok anche se bastava

    a[ch-'a']++;

    Tieni presente che non funziona con le maiuscole.
    Si hai ragione.
  • Re: Lettura di una parola e incremento dell'array

    Però la cosa è assolutamente ininfluente, dato che si tratta di una imposizione del testo dell'esercizio
  • Re: Lettura di una parola e incremento dell'array

    StandardOil ha scritto:


    Però la cosa è assolutamente ininfluente, dato che si tratta di una imposizione del testo dell'esercizio
    Veramente io leggo

    Entrambi i cicli devono ignorare i caratteri che non sono lettere ed entrambi devono trattare le lettere maiuscole allo stesso modo in cui trattano le minuscole.

    e quindi c'è altro da fare nel codice ...
  • Re: Lettura di una parola e incremento dell'array


    Concordo

    Mi ero spiegato male
    Intendevo che ignorare la differenza maiuscole minuscole fa parte delle prescrizioni
  • Re: Lettura di una parola e incremento dell'array

    StandardOil ha scritto:



    Concordo

    Mi ero spiegato male
    Intendevo che ignorare la differenza maiuscole minuscole fa parte delle prescrizioni
    Ah ... d'accordo ... e anche ignorare il fatto che l'utente possa usare altri caratteri ...
  • Re: Lettura di una parola e incremento dell'array

    Questo è il codice finale:
    
    #include<stdio.h>
    #include<ctype.h>
    #define N 26
    int main(void){
    
    char ch;
    int i,a[N]={0};
    
    printf("Inserisci la prima parola:");
    
    
    while((ch=getchar())!='\n'){
    isalpha(ch);
    a[(tolower(ch))-'a']++;}
    
    
    
    printf("Inserisci la seconda parola:");
    
    
    while((ch=getchar())!='\n'){
    isalpha(ch);
    a[(tolower(ch))-'a']--;}
    
    for( i=0; i < N; i++){
    if(a[i]!=0){
    printf("Le due parole NON sono anagrammi\n");
    return 0;
    }
    }
    
    printf("Le due parole SONO anagrammi\n");
    
    return 0;
    }
    
    
    Ho provato a mettere(sicuramente in modo errato) isalpha insieme a tolower però non funzionava bene, come si dovrebbe fare?
  • Re: Lettura di una parola e incremento dell'array

    La isalpha è una funzione ... devi testare il risultato con una if ...

    Ma qualche ricerchina e una lettura? Altrimenti come si devono conoscere le cose?

    http://www.cplusplus.com/reference/cctype/isalpha
  • Re: Lettura di una parola e incremento dell'array

    Come va adesso?:
    
    #include<stdio.h>
    #include<ctype.h>
    #include<stdbool.h>
    #define N 26
    
    void read_word(int parola[26]);
    bool equal_array(int counts1[26], int counts2[26]);
    int main(void){
    
    
    int i,parola1[N]={0}, parola2[N]={0};
    
    printf("Inserisci la prima parola:");
    
    read_word(parola1);
    
    
    printf("Inserisci la seconda parola:");
    
    read_word(parola2);
    
    printf("le due parole sono anagrammi:%d\n",(equal_array(parola1, parola2)));
    
    
    return 0;
    }
    void read_word(int counts[26]){
    char ch;
      while((ch=getchar())!='\n'){
      if(isalpha(ch))
      counts[(tolower(ch))-'a']++;
    }
    }
    bool equal_array(int parola1[26], int parola2[26]){
      int i;
      for(i=0; i<N; i++){
      if(parola1[i]!=parola2[i])
      return false;
      }
      return true;
    }
    
    
  • Re: Lettura di una parola e incremento dell'array

    Prima avevo scritto delle grandi boiate e me ne scuso


    A parte il fatto che usi due vettori di conteggio quando ne viene prescritto uno

    Direi che va bene

    In particolare mi piace come usi direttamente il valore di ritorno delle funzioni invece che passare attraverso inutili variabili di appoggio, come purtroppo fanno in molti
  • Re: Lettura di una parola e incremento dell'array

    StandardOil ha scritto:


    Prima avevo scritto delle grandi boiate e me ne scuso


    A parte il fatto che usi due vettori di conteggio quando ne viene prescritto uno

    Direi che va bene

    In particolare mi piace come usi direttamente il valore di ritorno delle funzioni invece che passare attraverso inutili variabili di appoggio, come purtroppo fanno in molti
Devi accedere o registrarti per scrivere nel forum
29 risposte