PDA

Visualizza la versione completa : [C] Riordinare stringa e cercare un elemento in essa


francylosvitato
30-01-2005, 20:25
Ciao.
Io devo fare un programma in c che data una stringa la ordini e cerchi un elemento in essa (l'elemento da cercare č dato in input cosi' come i caratteri della stringa)
ho creato il listato e dev c++ me lo compila non mi da errori ma quando eseguo dopo che ho immesso i valori nel vettore da errore windows e mi si chiude il programma.
Allego il codice:

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
void main()
{
char vet[MAX],aux,ele;
int i=0,e,g,j,alto,basso,pos,n;
do
{
printf("Elementi Necessari --> ");
scanf("%d",&n);
}
while((n<0)||(n>99));
for(i=0;i<=n-1;i++)
{
printf("Inserisci %d Elemento --> ",i+1);
scanf("%s",&vet[i]);
}
for(j=0;j<n-1;j++) {
for(i=0;i<n-1;i++)
if(vet[i]>vet[i+1])
{
aux=vet[i];
vet[i]=vet[i+1];
vet[i+1]=aux;
}
}
for(i=0;i<n-1;i++)
printf("%s \n",vet[i]);
printf("Elemento da Cercare --> ");
scanf("%c",&e);
alto=0; basso=n-1; pos=-1;
do
{
g=(alto+basso)/2;
if(vet[g]==e)
pos=g;
else
if(vet[g]<e)
alto=g+1;
else
basso=g-1;
}
while((alto<=basso)&&(pos==-1));
if(pos!=-1)
printf("Elemento trovato nella posizione %d \n",pos);
else
printf("Elemento non trovato\n");
system("PAUSE");
}

Qual'č l'errore che ho commesso??? :master:
P.S.
non ho fatto in tempo ha mettere i commenti scusate!

francylosvitato
01-02-2005, 15:00
Ragā vi prego rispondetemi che non riesco a risolvere il problema!

netarrow
01-02-2005, 16:02
Ti consiglio di utilizzare pių funzioni, sopratutto con il C che di certo da debuggare non č semplice.

Il tuo array vet io lo allocherei dinamicamente a seconda di quanti elementi vengono passati, tipo:



int n;
char* vet;
scanf("%d", &n);//Elementi necessari
vet = malloc(sizeof(char) * n);


L'errore secondo me sta nell'ordinamento:



for(j=0;j<n-1;j++) {
for(i=0;i<n-1;i++)
if(vet[i]>vet[i+1])
{
aux=vet[i];
vet[i]=vet[i+1];
vet[i+1]=aux;
}


Se io inserisco 4 elementi quando j arriva a 3, ovvero l'ultimo dato visto che parto da 0, l'if farā: vet[3] > vet[4], ma 4 non č parte di memoria del programma, quindi chissā da chi č giā usato l'indirizzo vet + 4 :D

Per ordinare il tuo vettore credo volevi usare il bubble sort (http://www.mat.uniroma3.it/users/liverani/bubble_sort.html) .

P.S inoltre char ele non č mai usato nel programma, magari serviva per qualcosa e te ne sei dimenticato?

:ciauz:

Loading