Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c++]raggruppamento e indice

    il problema richiede oltre a prendere in input la stringa, di contare i caratteri diversi all'interno di essa...allora ho pensato :master: di ordinare i caratteri (richiesto già nell'esercizio) e farci un raggruppamento, così conto i gruppi di caratteri uguali e quindi i caratteri diversi ...il codice messo così funziona ...però ora mi chiedo: sono leciti quei
    lim-1 , voglio dire, essendo un vettore di caratteri, nel momento in cui do l'invio per prendere in input la stringa, il vettore assume cm ultimi due caratteri '\n'... è così oppure sto facendo un ragionamento che nn ci azzecca na mazza ? Naturalmente x capire quello che sto a dì è necessario leggere il codice ...quindi buona lettura ...e buon esaurimento !

    codice:
     
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXLINE 10
    
    void ordina(char* line, int maxline);
    int conteggio(char* line, int maxline);
    
    int main()
    {
     int diversi, n;
     char frase[MAXLINE];
       cout << "Inserisci la stringa" << endl;
       cin.getline(frase,sizeof(frase));
       n= strlen(frase);
       cout << "La stringa e' lunga " << n << " caratteri" << endl;
       diversi=conteggio(frase,n);
       cout << "La stringa e' formata da " << diversi << " caratteri diversi" << endl;
       cout << "La stringa iniziale e' " << frase << endl;
          system("PAUSE");
          return 0;
    }
    
    void ordina(char stringa[], int lim)
    {
     int E,F,MAX,j,scambio;
    
     E=lim-1;
     F=1;
    
     while (F==1)
          {
            F=0;
            MAX=E;
    
            for (j=0;j<=MAX-1;j++)
              {
                 if (stringa[j] > stringa[j+1])
                 {
                  scambio=stringa[j];
                  stringa[j]=stringa[j+1];
                  stringa[j+1]=scambio;
                  E=j;
                  F=1;
                 }
              }
         }
         }
    
    int conteggio(char stringa[],int lim)
    {
     char prec;
     int conta,j;
     prec=stringa[1];
     conta=1;
     ordina (stringa, lim);
     for (j=1;j<=lim-1;j++)
         {
          if (prec!=stringa[j])
            ++conta;
            else
            prec=stringa[j];
          }
          return conta;
     }

  2. #2
    Ho rivisto un'attimo il tuo codice perchè non funzionava bene soprattutto sull'ultima evidenza "la stringa iniziale è ...".
    Per il concetto di lim-1 il carattere "\n" nella tua manipolazione delle stringhe non lo tocchi mai ossia resta sempre perchè conti la lunghezza della frase (senza "\n") esempio 13 e lo passi ad un vettore come (13-1) ossia un vettore che va da 0 a 12 (13 elementi) e manipoli quei dati.

    Un po confuso èèèèèèèèèèèèèèèèèè



    codice:
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAXLINE 20
    
    void ordina(char* line, int maxline);
    int conteggio(char* line, int maxline);
    
    int main()
    {
       int diversi, n;
       char frase[MAXLINE];
       char copiafrase[MAXLINE];
       cout << "Inserisci la stringa" << endl;
       cin.getline(frase,sizeof(frase));
       n= strlen(frase);
       for (int k = 0; k <= n+1; k++)
       copiafrase[k] = frase[k];
       cout << "La stringa e' lunga " << n << " caratteri" << endl;
       diversi=conteggio(frase,n);
       cout << "La stringa e' formata da " << diversi << " caratteri diversi" << endl;
       cout << "La stringa iniziale e' " << copiafrase << endl;
       system("PAUSE");
       return 0;
    }
    
    void ordina(char stringa[], int lim)
    {
     int E,F,MAX,j,scambio;
    
     E=lim-1;
     F=1;
    
     while (F==1)
          {
            F=0;
            MAX=E;
    
            for (j=0;j<=MAX-1;j++)
              {
                 if (stringa[j] > stringa[j+1])
                 {
                  scambio=stringa[j];
                  stringa[j]=stringa[j+1];
                  stringa[j+1]=scambio;
                  E=j;
                  F=1;
                 }
              }
         }
         }
    
    int conteggio(char stringa[],int lim)
    {
     char prec;
     int conta,j;
     conta=0;
     ordina (stringa, lim);
     prec=stringa[0];
    for (j=0;j<=lim-1;j++)
         {
          if (prec!=stringa[j])
    	     {
              ++conta;
    	      prec=stringa[j];
    		  }
              else
    		 {
              prec=stringa[j];
    	     }
          } 
          return conta;
     }

  3. #3
    si ho capito...grazie x la delucidazione!
    mi ero accorta dell'errore sul vettore!
    un'altra cosa...dato che sn agli inizi...vorrei anche sapere se
    il modo in cui ho scritto il codice cn il prototipo, le funzioni e le dichairazioni sia corretto...vi prego solo un giudizio generale...nn vorrei imparare a programmare in maniera sbagliata..cioè voglio dire conta molto anche l'ordine...ora nn so se sto violando qualche regola del forum!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.