Eliminare doppioni in una variabile char

di il
18 risposte

Eliminare doppioni in una variabile char

Salve, sono nuovo in questo forum, devo stampare una stringa e le relative ricorrenze in essa, ma solo una volta, anche se i caratteri ripetuti sono più di uno.
#include<iostream>
#include<string.h>
#define MAX 100
using namespace std;

int main() {

	char stringa[MAX];
	int frequenza[MAX];
	int dim;
	int i, j;

	cout << "Inserire la stringa: ";
	cin.getline(stringa, MAX);
	dim = strlen(stringa);

	for (i = 0; i != dim; i++)
	{
		frequenza[i] = 0;
	}

	//VERIFICA RICCORENZA
	for (i = 0; i != dim; i++)
	{
		for (j = 0; j != dim; j++)
		{
			if (stringa[i] == stringa[j])
			{
				frequenza[i]++;
			}
			if (stringa[i] == ' ')
			{
				stringa[i] = '_';
			}
		}
		//ELIMINAZIONE DOPPIONI
		cout << stringa[i] << ":" << frequenza[i] << endl;
	}
	return 0;
}
questo e' il codice.

18 Risposte

  • Re: Eliminare doppioni in una variabile char

    Utilizza i tag code o il codice non si legge.

    E poi chiarisci... questo è il codice e quindi?
  • Re: Eliminare doppioni in una variabile char

    Dando in input una frase esempio: "ciao bello" mi da:
    c:1
    i:1
    a:1
    o:2
    :1
    b:1
    e:1
    l:2
    l:2
    o:2

    devo fare in modo di non dare in output i doppioni 2 volte (in questo caso), ovvero l:2, o:2, e non so come fare.
  • Re: Eliminare doppioni in una variabile char

    I tag code, pulsante < / >

    L'array delle frequenze :
    
    int frequenza[256] = {0};
    
    Dopodiché per ogni carattere che incontri:
    
     frequenza[stringa[i]]++;
    
    A questo punto tutti i caratteri sono conteggiati secondo la codifica ASCII, senza doppioni
  • Re: Eliminare doppioni in una variabile char

    E invece per dare l'output corretto come dovrei fare?
    mi da comunque l'output del doppione stavolta con la frequenza doppia, da 2 è diventata 4.
  • Re: Eliminare doppioni in una variabile char

    Ma cosa hai scritto? Basta analizzare il contenuto del vettore dopo che fai i conteggi.

    P.S. usa i tag CODE per mostrare il codice
  • Re: Eliminare doppioni in una variabile char

    #include<iostream>
    #include<string.h>
    #define MAX 256
    using namespace std;
    
    int main() {
    
    	//VARIABILI
    	int frequenza[MAX] = { 0 };
    	char stringa[MAX] = { 0 };
    	int i, j;
    	int dim;
    
    	//INSERIMENTO STRINGA
    	cout << "Inserire la stringa: ";
    	cin.getline(stringa, MAX);
    	dim = strlen(stringa);
    
    	//VERIFICA RICORENZA
    	for (i = 0; i != dim; i++)
    	{
    		for (j = 0; j < dim; j++)
    		{
    			if (stringa[i] == stringa[j])
    			{
    				frequenza[stringa[i]]++;
    			}
    		}
    		//STAMPA STRINGA E RICORRENZA
    		cout << stringa[i] << ":" << frequenza[stringa[i]] << endl;
    	}
    	return 0;
    }
    spero ora vediate il codice.
    alla stampa mi da come output, sempre per la frase esempio:
    c:1
    i:1
    a1
    o:2
    _:1
    b:1
    e:1
    l:2
    l:4
    o:4
  • Re: Eliminare doppioni in una variabile char

    Non ci devono essere for annidati in questo esercizio. Un unico for per contare le frequenze, senza if. Un altro per stamparle
  • Re: Eliminare doppioni in una variabile char

    for (i = 0; i != dim; i++)
    	{
    		if (stringa[i] == stringa[i+1])
    		{
    			frequenza[stringa[i]]++;
    		}
    		//STAMPA STRINGA E RICORRENZA
    		cout << stringa[i] << ":" << frequenza[stringa[i]] << endl;
    	}
    se non metto il secondo for non scorre la stringa..o sbaglio?
  • Re: Eliminare doppioni in una variabile char

    Prova a fare uno sforzo, dai. È un for da due righe per acquisire e un altro for da due righe per stampare
  • Re: Eliminare doppioni in una variabile char

    //VERIFICA RICORENZA
    	for (i = 0; i != dim; i++)
    	{
    		if (stringa[i] == stringa[i+1])
    		{
    			frequenza[stringa[i]]++;
    		}
    	}
    
    	//STAMPA STRINGA E RICORRENZA
    	for (i = 0; i < dim; i++)
    	{
    		cout << stringa[i] << ":" << frequenza[stringa[i]] << endl;
    	}
    dovrebbe essere cosi.. ma mi da la frequenza zero a tutti. e continua ad esserci il doppione
    mi sto disperando sempre più.
    cosa intendi per for a due righe?
  • Re: Eliminare doppioni in una variabile char

    
    #include <iostream>
    using namespace std;
    int main(){
      char stringa[1000] = {'\0'};
      int frequenza[256] = {0};
      cout << "Inserire la stringa: ";
      cin.getline(stringa, sizeof(stringa));
      for(int i = 0; stringa[i] != '\0'; i++)
         frequenza[stringa[i]]++;
      for(char c = ' '; c <= '~'; c++)
         cout << c << ": " << frequenza[c] << endl;
      return 0;
    }
    
  • Re: Eliminare doppioni in una variabile char

    Beh si, cosi è giusto ma mi serve avere i caratteri in output nell'ordine originale e non in ordine alfabetico...
  • Re: Eliminare doppioni in una variabile char

    Sì ... "ti serve" ... ma ci hai provato a farlo? Non ci vuole molto a questo punto ... pensaci un po'
  • Re: Eliminare doppioni in una variabile char

    In quel caso l'ultimo for lo fai per i su stringa, per ogni carattere se la sua frequenza è maggiore di zero, lo stampi con la relativa frequenza, dopodiché imposti la frequenza a zero così la prossima volta che becchi il carattere non lo riscrivi. Tre righe. Prova come dice oregon, altrimenti non serve a nulla darti indicazioni
Devi accedere o registrarti per scrivere nel forum
18 risposte