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