By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,852 Members | 955 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,852 IT Pros & Developers. It's quick & easy.

checking to see if a string contains every letter of the alphabet

P: n/a
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 ***
Nov 17 '05 #1
Share this Question
Share on Google+
9 Replies


P: n/a
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" <bo*******@netscape.net> wrote in message
news:eG**************@TK2MSFTNGP14.phx.gbl...
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 ***

Nov 17 '05 #2

P: n/a
KH
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:
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" <bo*******@netscape.net> wrote in message
news:eG**************@TK2MSFTNGP14.phx.gbl...
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 ***


Nov 17 '05 #3

P: n/a
KH <KH@discussions.microsoft.com> wrote:
Using a bitmap might be more efficient than allocating a hash table ...


Indeed - not as easy to understand the code as using a boolean array,
however:

static bool ContainsAllLetters(string x)
{
bool[] letters = new bool[26];

int lettersFound=0;

foreach (char c in x)
{
int index = char.ToUpper(c)-'A';

if (index >= 0 &&
index < letters.Length &&
!letters[index])
{
letters[index]=true;
lettersFound++;
}
}

return (lettersFound==letters.Length);
}

Note that this won't spot characters which have accents etc - but at
least it doesn't fail if you include any numbers.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
Nov 17 '05 #4

P: n/a
KH
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:
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" <bo*******@netscape.net> wrote in message
news:eG**************@TK2MSFTNGP14.phx.gbl...
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 ***


Nov 17 '05 #5

P: n/a
KH <KH@discussions.microsoft.com> wrote:
Using a bitmap might be more efficient than allocating a hash table ...


Indeed - not as easy to understand the code as using a boolean array,
however:

static bool ContainsAllLetters(string x)
{
bool[] letters = new bool[26];

int lettersFound=0;

foreach (char c in x)
{
int index = char.ToUpper(c)-'A';

if (index >= 0 &&
index < letters.Length &&
!letters[index])
{
letters[index]=true;
lettersFound++;
}
}

return (lettersFound==letters.Length);
}

Note that this won't spot characters which have accents etc - but at
least it doesn't fail if you include any numbers.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
Nov 17 '05 #6

P: n/a
KH
An improvement both of us missed ... each loop should probably test whether
our TRUE condition has been met so we don't continue iterating the string
unnecessarily.
"Jon Skeet [C# MVP]" wrote:
KH <KH@discussions.microsoft.com> wrote:
Using a bitmap might be more efficient than allocating a hash table ...


Indeed - not as easy to understand the code as using a boolean array,
however:

static bool ContainsAllLetters(string x)
{
bool[] letters = new bool[26];

int lettersFound=0;

foreach (char c in x)
{
int index = char.ToUpper(c)-'A';

if (index >= 0 &&
index < letters.Length &&
!letters[index])
{
letters[index]=true;
lettersFound++;
}
}

return (lettersFound==letters.Length);
}

Note that this won't spot characters which have accents etc - but at
least it doesn't fail if you include any numbers.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too

Nov 17 '05 #7

P: n/a
KH
An improvement both of us missed ... each loop should probably test whether
our TRUE condition has been met so we don't continue iterating the string
unnecessarily.
"Jon Skeet [C# MVP]" wrote:
KH <KH@discussions.microsoft.com> wrote:
Using a bitmap might be more efficient than allocating a hash table ...


Indeed - not as easy to understand the code as using a boolean array,
however:

static bool ContainsAllLetters(string x)
{
bool[] letters = new bool[26];

int lettersFound=0;

foreach (char c in x)
{
int index = char.ToUpper(c)-'A';

if (index >= 0 &&
index < letters.Length &&
!letters[index])
{
letters[index]=true;
lettersFound++;
}
}

return (lettersFound==letters.Length);
}

Note that this won't spot characters which have accents etc - but at
least it doesn't fail if you include any numbers.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too

Nov 17 '05 #8

P: n/a
Thank you for the replies, they are extremely helpful.
*** Sent via Developersdex http://www.developersdex.com ***
Nov 17 '05 #9

P: n/a
Thank you for the replies, they are extremely helpful.
*** Sent via Developersdex http://www.developersdex.com ***
Nov 17 '05 #10

This discussion thread is closed

Replies have been disabled for this discussion.