PDA

Visualizza la versione completa : Dove sta l'errore in questo codice?


Fight
02-02-2003, 11:38
Dovrebbe vedere se due stringhe sono uguali.

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{ char c[100],f[100];
bool h=true;
int i,j;
gets (c);

gets (f);
i=0;
j=0;
while ((c[i]!='\0')&&(f[j]!='\0'))
{ if (c[i]==f[j])
{ i++;
j++;
}
else
{h=false;
}
}


cout << h;

system("PAUSE");
return 0;
}

Michele Facchin
02-02-2003, 11:51
Ti dimentichi di incrementare i e j nel else..

Comunque non mescolare C++ e C pls :)

Andrea Simonassi
02-02-2003, 13:48
1)Dopo h=false; ci va un break per evitare di ciclare per tutta la stringa.

2)includi la vecchia <iostream.h> che non standard, devi includere <iostream> senza .h e scrivere std::cout << h

3)in C++ non si usa gets, usa piuttosto cin, i miscugli C e C++ fanno confusione, anche se a volte si usano lo stesso, meglio cercare di evitarli.

4)usi 2 variabili indice quando ne basta una

5)non controlli che la stringa in input sia sufficiente a contenere l'input dell'utente, ma va bene lo stesso visto che un'esercizio.

6)Probabilmente l'algoritmo funziona ma non ti da output perch cout << h non stampa nulla, almeno con la mia iostream.h, mentre con iostream stampa bene.

Eccoti una soluzione + professionale al tuo esercizio



#include <iostream>

const char const * TrueFalse[] = {"false", "true"};

int main()
{
char c[100],f[100];
bool h=true;
int i=0;

std::cin >> c;
std::cin >> f;

while (c[i] != '\0' && f[i]!='\0' && c[i] == f[i])
++i;

h = c[i] == f[i];

std::cout << TrueFalse[static_cast<int>(h)] << "\n";

system("PAUSE");
return 0;
}

Fight
02-02-2003, 15:09
Grazie per le risposte.

Fight
02-02-2003, 15:17
Ragazzi visto che siete molto pi bravi di me non che potete dirmi dove sbaglio in questi due esercizi?
A me non funzionano.
1) Date due stringhe S e T si determini il numero delle volte e le posizioni in cui S contenuta in t.

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

//programma che conta la stringa contenuta in un'altra

int main()
{char S[]="";
char T[]="";
int i,j,cont,pos,conte,sottrai;
gets(S);
gets(T);
cont=0; pos=0; conte=0;
i=0;j=0;

//toglie gli spazi bianchi iniziali
while (S[i]!='\0')
{if(S[i]==' ');
i++;

}
while (T[j]!='\0')
{if(T[j]==' ');
j++;
}

while ((S[i]!='\0')&(T[i]!='\0'))
{i=0;
if (S[i]== T[j])
{cont=cont+1; //posizione in cui iniziare di nuovo la ricerca se i primi elem sono diversi
do {
i++;
j++;
sottrai=j-1;
}while ((S[i]==T[j]) & (S[i]!='\0')&(T[i]!='\0'));
if (S[i]=='\0')
{ conte=conte+1;
pos =j-sottrai;
}
else j=cont;
}
else j++;
}

cout <<pos;
cout <<cont;







system("PAUSE");
return 0;
}

2) Dati due vettori A e B si ordino in senso crescente e si determini un nuovo vettore C ottenuto dalla fusione dei due mantenedo l'ordinamento.
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

void leggivett(float a[],int dim, int *rie);
void ordinavett (float V[], int riemp);
void stampavett (float g[],int ri);

int main()
{ float S[100],T[100],R[200];
int i,j,k,r1,r2;
leggivett (S,100,&r1);
leggivett (T,100,&r2);
ordinavett (S,r1);
ordinavett (T,r2);


//Fusione dei due vettori in un terzo

i=0; j=0; k=0;
while ((i<r1)||(j<r2))
{ if (S[i]<T[j])
{ R[k]=S[i];
i++;
k++;
}
else
{ R[k]=T[j];
j++;
k++;
}
}

//Se il primo vettore finito mette il secondo nel terzo

if (i==r1)
{for (i=k; i<r1+r2; i++)
{R[i]=T[j];
j++;

}
}
//Se esaurito il secondo vettore mette il primo nel terzo

if (j==r2)
{for (j=k;j<r1+r2;j++)
{R[j]=S[i];
i++;
}

}

stampavett (R,r1+r2);


system("PAUSE");
return 0;
}

void leggivett(float a[],int dim, int *rie)
{int i;
do{
printf ("Inserire il numero di elementi di un vettore\n");
scanf ("%d",rie);
}while ((*rie >dim)||(*rie<0));

for (i=0; i<*rie; i++)
{ printf ("Inserire elemento: %d \t",i+1);
scanf ("%f",&a[i]);

}

}

void stampavett (float g[],int ri)
{int i;
printf("Ecco il Vettore ""FUSO"" e Ordinato: \n");
for (i=0; i<ri; i++)
{ printf ("%f \n",g[i]);

}
}


void ordinavett (float V[], int riemp)
{ int i,j;
float swap;
for (j=0; j<riemp-1;j++)
{for (i=0; i<riemp-1-j; i++)
{ if (V[i]>V[i+1])
{swap=V[i];
V[i]=V[i+1];
V[i+1]=swap;
}
}
}

}

Loading