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

    [C++]Ordinamento e controllo stringhe

    Ciao ragazzi,vi scrivo per un problema
    Devo realizzare un programmino che date n stringhe,ad ogni stringa mi effettui il controllo per vedere se i caratteri inseriti non siano ne numeri,ne simboli strani.
    e successivamente mi ordini le stringhe in ordine crescente o decrescente,in base a quello che preferisce l'utente
    ora: per quanto riguarda l'ordinamento ci sono,e anche per quanto riguarda l'algoritmo per il controllo ci sono,ma non so come inserirlo in una funzione,perchè è questo che dovrei fare.
    vi posto il codice così magari capite meglio cosa intendo.

    codice:
    #include<stdio.h>
    #include<iostream>
    #include<conio.h>
    #include<string.h>
    
    #define dim 5
    
    using namespace std;
    void controllo();
    main()
    
    {
        char a[dim][15];
        char temp[15];
        int flag=1,k=dim-1,i,scelta;
        
        cout<<"Controllo e ordinamento stringhe";
        cout<<"\n--------------------------------\n\n\n";
        
        for(i=0;i<dim;i++){
                            cout<<"\n- Inserisci stringa numero "<<i<<": ";
                            cin>>a[i];
                            controllo();
                            }
                            
                            cout<<"\nPremere 1 per ordine crescente oppure 2 per ordine decrescente: ";
                            cin>>scelta;
        switch(scelta){case 1:	
                                while(flag==1 && k>0){
                                flag=0;
                                for(i=0;i<k;i++){
                                                    if(strcmp(a[i],a[i+1])>0){
                                                                                strcpy(temp,a[i+1]);
                                                                                strcpy(a[i+1],a[i]);
                                                                                strcpy(a[i],temp);
                                                                                flag=1;
                                                                            }
                                            }
                                k=k-1;
                            }
       					break;
                      case 2:	
                                while(flag==1 && k>0){
                                flag=0;
                                for(i=0;i<k;i++){
                                                    if(strcmp(a[i],a[i+1])<0){
                                                                                strcpy(temp,a[i+1]);
                                                                                strcpy(a[i+1],a[i]);
                                                                                strcpy(a[i],temp);
                                                                                flag=1;
                                                                            }
                                            }
                                k=k-1;
                            }
       					break;
                      default:cout<<"\nErrore: le scelte possibili sono 1 o 2";
                      }
                                                                                
        for(i=0;i<dim;i++){
                            cout<<a[i]<<"\n";
                            }
                            getch();
    }void controllo(){
                        
                        int lung=0,flag=1,i;
                        lung=strlen(a);
                                for(i=0;i<lung;i++){
                                                    a[i]=tolower(a[i]);
                                                    }
                                if(lung+1>15){
                                                cout<<"\nErrore: Dimensione non consentita";
                                                }
                                while((i<lung) && flag){
                                                        if(a[i]<97 && a[i]>122){
                                                                                        flag=0;
                                                                                        cout<<"\n"<<a[i]<<" Carattere non valido";
                                                                                     }
                                                        i++;
                                                        }
                            }

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Forse non ho ben capito il problema, tu vuoi sapere come mettere tutto in una o più funzioni il codice scritto in main?

    Se è così
    farei una funzione che si chiama
    inserisciStringa() chiamata da un ciclo, oppure puoi anche mettere il ciclo all'interno e passare l'array.

    poi farei una funziona ordina() che effettua solo l'ordinamento ricevendo in input l'array non ordinato e ritornandoti l'array ordinato.

  3. #3
    no in pratica vorrei inserire all0pinterno di una funzione solo il controllo sulle stringhe,e se noti l'algoritmo per il controllo l'ho inserito nella funzione controllo.
    ho messo il prototipo prima del main,la chiamata dopo ogni inserimento di una stringa,e il corpo dopo il main.
    il problema credo stia nel fatto che non so se sia giusto "void controllo" e non so cosa mettere all'interno delle parentesi tonde della funzione.
    inoltre credo di aver sbagliato qualcosa con le variabili all'interno della funzione stessa

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Per come hai scritto il codice controllo lo esegui per ogni carattere digitato, quindi devi passare a controllo a[i], scrivendo controllo(a[i]).

    Quando definisci controllo devi esplicitare il parametro da controllare, quindi scrivere così

    controllo(char cDaControllare)

    Inoltre una funzione di controllo in genere non ritorna un void ma un bool (true se il controllo è andato bene, false altrimenti).

    Dentro la funzione controllo tu fai lung=strlen(a); ma a non è definita da nessuna parte (idem per a[i].

    Inoltre per come viene chiamata controllo la lunghezza è sempre pari a 1 essendo un carattere.

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.