PDA

View Full Version : Dove sbaglio?


gik25
08-06-2003, 17:41
Dove sbaglio?



public class Words
{
public Words()
{

}

private string [,] array = new string[25,50000];
private int [] lenght = new int[25];





public void Add(string p)
{
char starting_letter = p.ToCharArray(0,1)[0];
int index = starting_letter-'a';
array[index,lenght[index]]=p;
lenght[index]++;
}

public string Get(char c, int i)
{
return array[c-'a',i];
}

public string[] Complete(string s)
{
string[] trovati = new string[500000];
int n_trovati=0;
s=s.Trim();

if(s.ToCharArray()[0]=='?' && s.ToCharArray()[0]=='*')
{
for(int i=0;i<25;i++)
for(int j=0;j<lenght[i];j++)
{

if(CheckCompatibile(array[i,j],s)) {trovati[n_trovati]=array[i,j];n_trovati++;}
}

return trovati;
}
else
{

for(int j=0;j<lenght[s.ToCharArray()[0]-'a'];j++)
{

if(CheckCompatibile(array[s.ToCharArray()[0]-'a',j],s)) {trovati[n_trovati]=array[s.ToCharArray()[0]-'a',j];n_trovati++;}
}

return trovati;
}
}

/// <summary>
/// La stringa A puņ anche contenere ? e *
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public bool CheckCompatibile(string b, string a)
{
char[] parola_asteriscata = a.ToCharArray();
char[] parola_normale = b.ToCharArray();

if(a.IndexOf('*')==-1)
{
if(a.Length!=b.Length) return false;
}
else return CheckCompatibileConAsterischi(parola_asteriscata,parola_normale);

int lunghezza_stringhe=Math.Min(a.Length,b.Length);

for(int m=0;m<lunghezza_stringhe;m++)
{
if(parola_asteriscata[m]==parola_normale[m]) continue;
else if(parola_asteriscata[m]=='?') continue;
else return false;

}
return true;
}

public bool CheckCompatibileConAsterischi(char[] parola_asteriscata, char[] parola_normale)
{
bool asterisco_incontrato=false;
int n=0;
for(int m=0;m<parola_normale.Length ;m++)
{
if(n>=parola_asteriscata.Length) return false;
if(parola_asteriscata[n]=='*') {asterisco_incontrato=true;++n;continue;}
else if(parola_asteriscata[n]==parola_normale[m] && !asterisco_incontrato) {++n;continue;}
else if(parola_asteriscata[n]!=parola_normale[m] && !asterisco_incontrato) {return false;}
else if(parola_asteriscata[n]==parola_normale[m] && asterisco_incontrato) {asterisco_incontrato=false;++n;continue;}
else if(parola_asteriscata[n]!=parola_normale[m] && asterisco_incontrato) {continue;}
}
return true;
}
}

gik25
08-06-2003, 17:42
Questo pezzo in particolare

public bool CheckCompatibileConAsterischi(char[] parola_asteriscata, char[] parola_normale)
{
bool asterisco_incontrato=false;
int n=0;
for(int m=0;m<parola_normale.Length ;m++)
{
if(n>=parola_asteriscata.Length) return false;
if(parola_asteriscata[n]=='*') {asterisco_incontrato=true;++n;continue;}
else if(parola_asteriscata[n]==parola_normale[m] && !asterisco_incontrato) {++n;continue;}
else if(parola_asteriscata[n]!=parola_normale[m] && !asterisco_incontrato) {return false;}
else if(parola_asteriscata[n]==parola_normale[m] && asterisco_incontrato) {asterisco_incontrato=false;++n;continue;}
else if(parola_asteriscata[n]!=parola_normale[m] && asterisco_incontrato) {continue;}
}
return true;
}

gik25
08-06-2003, 17:44
Il programma prende un elenco di parole e lo confronta parola per parola con quella digitata dall'utente che puņ contenere ? e *

Ogni ? vale per qualsiasi carattere, ogni * per qualsiasi sequenza di carattari

es. cane = c?ne
c*=cane, capanno, ecc

il pezzo sopra si occupa delle parole con gli asterisci.