PDA

Visualizza la versione completa : [C++]Ordinamento e controllo stringhe


scatman87
10-02-2010, 14:18
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.



#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++;
}
}

Joe Taras
10-02-2010, 14:22
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.

scatman87
10-02-2010, 14:27
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

Joe Taras
10-02-2010, 14:37
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.

Loading