Guest User

Untitled

a guest
May 16th, 2012
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 300
  5. int main(){
  6.     char frs[N]; /*SECONDO VETTORE ISTANZIATO ALLA RIGA 21*/
  7.     int i, h, g, fineVettore;
  8.  
  9.     /*BLOCCO PER RIEMPIRE IL VETTORE*/
  10.     printf("Inserisci la frase (Max %d caratteri):\n", N);
  11.     for(i = 0; i < N; i++){
  12.         scanf("%c", &frs[i]);
  13.         if(frs[i] == '\n'){
  14.             frs[i] = '\0';
  15.             fineVettore = i;
  16.             i = N;
  17.         }
  18.     }
  19.  
  20.     /*Soltanto ora che conosco quant'è lunga la stringa creo il
  21.     vettore dei doppioni, così occupo meno spazio in memoria. Il
  22.     vettore dei doppini è lungo quanto l'altro vettore, perchè
  23.     a priori non posso sapere se sono tutte diverse.*/
  24.     char dopp[fineVettore];
  25.  
  26.     /*AZZERA IL VETTORE DEI DOPPIONI*/
  27.     for(i = 0; i < fineVettore; i++){
  28.         dopp[i] = 0;
  29.     }
  30.  
  31.     /*BLOCCO CHE SCANDISCE LA FRASE e se trova doppioni aggiorna la
  32.     //posizione corrispondente nel vettore doppioni*/
  33.     for(i = 0; i < fineVettore; i++){
  34.         for(h = i; h < fineVettore; h++){
  35.             if (frs[i] == frs[h]){
  36.                 /*Controllo se per caso non ho già analizzato
  37.                 precedentemente quella lettera; considero come caso
  38.                 predefinito che io non l'abbia ancora fatto, mettendo
  39.                 una variabile di controllo (nuovo) = 1. Se però grazie
  40.                 al ciclo con g mi accorgo che l'ho già trovata, nuovo
  41.                 diventa 0 segnalandolo. Così il posto corrispondente
  42.                 del vettore dei doppioni si aggiorna soltanto se nuovo
  43.                 è uguale a 1. */
  44.                 int nuovo = 1;
  45.                 for(g = 0; g < i; g++){
  46.                     if(frs[i] == frs[g]){
  47.                         nuovo = 0; //C'era già!
  48.                     }
  49.                 }
  50.                 if (nuovo == 1){
  51.                     dopp[i] += 1;
  52.                 }
  53.             }
  54.         }
  55.     }
  56.  
  57.     //BLOCCO CHE STAMPA IL RISULTATO FINALE PER L'UTENTE
  58.     for(i = 0; i < fineVettore; i++){
  59.         if(dopp[i] > 1){
  60.             printf("L'elemento %c, alla posizione %d, si ripete %d volte.\n",
  61.                    frs[i], i, dopp[i]);
  62.         }
  63.     }
  64.     printf("\n NOTA: le lettere minuscole sono considerate diverse dalle maiuscole.\n");
  65. }
Advertisement
Add Comment
Please, Sign In to add comment