Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    4

    [c++]Ordinare alfabeticamente e dire la frequenza delle lettere di una stringa

    Ciao a tutti,
    mi è stato dato questo programmino, ho cercato di farlo ma ho qualche problema....
    questo è il testo:
    scrivere un algoritmo che legga una stringa di 100 caratteri e stampi in uscita:
    1) La stringa ordinata alfabeticamente.
    2) La frequenza delle lettere dell'alfabeto italiano.
    e questo è quello che ho cercato di fare:
    codice:
    #include<stdio.h>
    #include<iostream.h>
    #include<ctype.h>
    #include<conio.h>
    #include<cstring.h>
    #include<stdlib.h>
    typedef char str[101];
    char ord_alfa(str);
    int freq_lett(str);
    void main()
    {
      char alfa;
      str z;
      cout<<"Inserisci una stringa \n";
      gets(z);
      alfa=ord_alfa(z);
      int freq=freq_lett(z);
      cout<<"La stringa ordinata è "<<alfa;
      cout<<"\n La freq. delle lettere è "<<freq<<;
    }
    char ord_alfa(str z)
    {
      int i,aux;
      char alfa,x;
      for(i=0;i<strlen(z)-1;i++)
      {
    	  for(x=i+1;i<strlen(z);x++)
    		  if(z[i]>z[x])
    		  {
    			  aux=z[i];
    			  z[i]=z[x];
    			  z[x]=aux;
    		  }
    	}
    	return(alfa);
    } 
    int freq_lett(str z)
    {
    	int lettere[21],i;
    	char freq;
    	for(i=0;i<strlen(z);i++)
    	{
    		if((z[i]>='a')&&(z[i]<='z'))
    		{
    			 lettere[z[i]-'a']++;
    		}
    	}
    	for(i=0;i<21;i++)
    	{
    		if(lettere[i]>0)
    		{
    			 return(freq);
    		}
    }
    non è che ci sarebbe qualcuno che mi dia una mano??
    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    4
    nessuno?

  3. #3

    Re: [c++]Ordinare alfabeticamente e dire la frequenza delle lettere di una stringa

    Originariamente inviato da Ichigo1
    codice:
    char ord_alfa(str z)
    {
      int i,aux;
      char alfa,x;
      for(i=0;i<strlen(z)-1;i++)
      {
    	  for(x=i+1;i<strlen(z);x++)
    		  if(z[i]>z[x])
    		  {
    			  aux=z[i];
    			  z[i]=z[x];
    			  z[x]=aux;
    		  }
    	}
    	return(alfa);
    } 
    
    int freq_lett(str z)
    {
    	int lettere[21],i;
    	char freq;
    	for(i=0;i<strlen(z);i++)
    	{
    		if((z[i]>='a')&&(z[i]<='z'))
    		{
    			 lettere[z[i]-'a']++;
    		}
    	}
    	for(i=0;i<21;i++)
    	{
    		if(lettere[i]>0)
    		{
    			 return(freq);
    		}
    }
    Nelle due funzioni hai dimenticato di aprire e chiudere qualche parentesi graffa.
    Poi la traccia parla di alfabeto italiano, quindi le lettere w e j (che sono comprese tra a e z in quello inglese) non devi considerarle.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    4
    codice:
    #include<stdio.h>
    #include<iostream.h>
    #include<ctype.h>
    #include<conio.h>
    #include<cstring.h>
    #include<stdlib.h>
    typedef char str[101];
    char ord_alfa(str);
    int freq_lett(str);
    void main()
    {
      char alfa;
      int freq;
      str z;
      cout<<"Inserisci una stringa \n";
      gets(z);
      alfa=ord_alfa(z);
      freq=freq_lett(z);
      cout<<"La stringa ordinata è "<<alfa;
      cout<<"\n La freq. delle lettere è "<<freq;
    }
    char ord_alfa(str z)
    {
      int i,aux;
      char alfa,x;
      for(i=0;i<strlen(z)-1;i++)
      {
    	  for(x=i+1;i<strlen(z);x++)
    	  {
    		  if(z[i]>z[x])
    		  {
    			  aux=z[i];
    			  z[i]=z[x];
    			  z[x]=aux;
    		  }
    	  }
      }
      return(alfa);
    }
    int freq_lett(str z)
    {
    	int lettere[21],i;
    	char freq;
    	for(i=0;i<strlen(z);i++)
    	{
    		if((z[i]>='a')&&(z[i]<='z'))
    		{
    			 lettere[z[i]-'a']++;
    		}
    	}
    	for(i=0;i<21;i++)
    	{
    		if(lettere[i]>0)
    		{
    			 return(freq);
    		}
    	}
    }
    Parentesi corrette grazie. Però non funziona lo stesso, hai ragione sul fatto delle lettere però non so come fare per non considerarle. Pensavo di creare un array con all'interno le lettere dell'alfabeto e poi fare un confronto ma più facile a dirsi che a farsi....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    ho cercato di fare un algoritmo per ordinare una stringa
    ha il problema che se scrivi piu di -MAX_C- va ad alterare caselle poste
    dopo la fine dell'array con risultati imprevedibili(vedi funzione gets).
    spero possa esserti utile,ciao.
    codice:
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    #define MAX_C 10
    
    void main()
    {
    char z[MAX_C];
    printf("Inserisci una stringa \n");
    gets(z);
    int i;
    char temp;
    int diff; 
    int lung =(int)strlen(z);
    if(lung >MAX_C)
    {
    printf("\nstringa troppo lunga");
    printf("\npremere un tasto per uscire");
    }
    else
    {
    
    	do 
    	{
    	diff=0;
    
    	for(i=0;i<(lung-1);i++)
    	{	
    		
    		if(z[i]>z[i+1])
    			{
    				temp=z[i];
    				z[i]=z[i+1];
    				z[i+1]=temp;
    				diff=1;
    			}
    	}
    
    	}while(diff == 1);
    	printf("La stringa ordinata e %s",z);
    }
    	getch();
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    4
    mi scuso per l'assenza ma ho avuto problemi con la l'adsl.
    comunque.... alla fine il problema l'ho risolto e funziona perfettamente, eccolo qui(non sarà il massimo della professionalità, ma l'importante è che funzioni..).

    codice:
    #include<stdio.h>
    #include<iostream.h>
    #include<ctype.h>
    #include<conio.h>
    #include<cstring.h>
    #include<stdlib.h>
    typedef char str[101];
    void ord_alfa(str);
    void freq_lett(str);
    void main()
    {
      str z;
      cout<<"Inserisci una stringa \n";
      gets(z);
      ord_alfa(z);
      freq_lett(z);
    }
    void ord_alfa(str z)
    {
      int i,x,aux;
      for(i=0;i<strlen(z);i++)
      {
    	  for(x=0;x<strlen(z);x++)
    	  {
    		  if(z[i]<z[x])
    		  {
    			  aux=z[i];
    			  z[i]=z[x];
    			  z[x]=aux;
    		  }
    	  }
    	}
    	cout<<"La stringa ordinata è ";
    	for(i=0;i<strlen(z);i++)
    	{
    		 cout<<z[i];
    	}
    }
    void freq_lett(str z)
    {
      int i,j;
      int cont[21]={0};
      char alfabeto[22]="abcdefghilmnopqrstuvz";
      for(i=0;i<strlen(z);i++)
      {
    	  for(j=0;j<strlen(alfabeto);j++)
    	  {
    			 if(z[i]==alfabeto[j])
    			 {
    				  cont[j]++;
    			 }
    		}
    	}
    	cout<<"\nLa frequenza delle lettere è:";
    	for (j=0;j<21;j++)
    	{
    		cout<<"\n           "<<alfabeto[j]<<" -> "<<cont[j];
    
    	}
    }
    grazie a tutti!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.