Using a bitmap might be more efficient than allocating a hash table ...
const int CC_A = (int)'A'; // 65
const int CC_Z = (int)'Z'; // 90
const uint ONE = 0x01;
const uint MAX = 0xFFFFFFFF; // UInt32.MaxValue
string str = "abcdefghijklmnopqrstuvwxyz";
uint map = 4227858432; // first 26 bits OFF
int cc = 0; // char code
foreach (char ch in str)
{
cc = (int)Char.ToUpper(ch);
if (cc >= CC_A && cc <= CC_Z)
{
// In one line ...
// map |= (ONE << (cc - CC_A));
// Step by step...
// Subtract 65 from the char code so the mask fits in 32 bits
//
cc -= CC_A;
// Create the mask by shifting 1 bit the appropriate number of places
//
uint mask = ONE << cc;
// Reassign the bitmap
//
map |= mask;
}
}
if (map == MAX)
{
// TRUE, string contains all 26 alphabet chars
}
"Ignacio Machin ( .NET/ C# MVP )" wrote:
[color=blue]
> Hi,
>
> I would do this, I will create a Hash with the letters (char) as key and
> value 0 as values.
> I will iterate in the chars of the string and set the value
> somethins like this:
>
> Hashtable hash = new Hashtable();
>
> hash['a']=0;
> hash['b']=0;
> hash['c']=0;
> ....
>
> foreach( char c in string.ToCharArray() )
> hash[ c ] = 1;
>
> foreach( int i in hash.Values )
> if ( 0 == i )
> return false;
>
> return true;
>
>
> cheers,
>
> --
> Ignacio Machin,
> ignacio.machin AT dot.state.fl.us
> Florida Department Of Transportation
>
>
> "booksnore" <booksnore@netscape.net> wrote in message
> news:eGHfYbypFHA.1464@TK2MSFTNGP14.phx.gbl...[color=green]
> >I am writing some code to search for strings that contain every letter
> > of the alphabet. At the moment I am using the method below to check to
> > see if a string contains every letter of the alphabet. I wanted to use a
> > regular expression but I could not find an 'AND' operator within the
> > regular expression - so I need something like match true if string
> > contains 'a' and 'b' and 'c' and 'd' ..etc,etc. If anyone has any
> > thoughts on how I can provide the check more effectively than I am doing
> > at the moment the help would be very much appreciated.
> >
> >
> > private static bool InAlphabet(string text)
> >
> > {
> >
> > if(text==null)
> >
> > {
> >
> > return false;
> >
> > }
> >
> >
> >
> > int count = 97;
> >
> > bool IsValid = true;
> >
> > while (IsValid && count < 123)
> >
> > {
> >
> > // Cast character from integral type
> >
> > string regexStr = "(" + (char)count + ")";
> >
> > Regex regex_x = new Regex(regexStr);
> >
> > Match m_x = regex_x.Match(text);
> >
> > IsValid = m_x.Success;
> >
> > count++;
> >
> > }
> > return IsValid;
> >
> > }
> >
> >
> >
> > *** Sent via Developersdex
http://www.developersdex.com ***[/color]
>
>
>[/color]