PC Review


Reply
Thread Tools Rate Thread

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

 
 
booksnore
Guest
Posts: n/a
 
      22nd Aug 2005
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 ***
 
Reply With Quote
 
 
 
 
Ignacio Machin \( .NET/ C# MVP \)
Guest
Posts: n/a
 
      22nd Aug 2005
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>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 ***



 
Reply With Quote
 
 
 
 
=?Utf-8?B?S0g=?=
Guest
Posts: n/a
 
      22nd Aug 2005
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" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> >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 ***

>
>
>

 
Reply With Quote
 
Jon Skeet [C# MVP]
Guest
Posts: n/a
 
      22nd Aug 2005
KH <(E-Mail Removed)> 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 - <(E-Mail Removed)>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
 
Reply With Quote
 
=?Utf-8?B?S0g=?=
Guest
Posts: n/a
 
      22nd Aug 2005
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 <(E-Mail Removed)> 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 - <(E-Mail Removed)>
> http://www.pobox.com/~skeet
> If replying to the group, please do not mail me too
>

 
Reply With Quote
 
booksnore
Guest
Posts: n/a
 
      22nd Aug 2005
Thank you for the replies, they are extremely helpful.


*** Sent via Developersdex http://www.developersdex.com ***
 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Macro to Click on Alphabet Letter to go to Cell Where that Alphabet Letter Starts in Large Spreadsheet jcp370@comcast.net Microsoft Excel Discussion 2 26th Jul 2005 07:33 AM
Re: Converting a string to a string that contains the ASCII values of each letter in the origional string Jay B. Harlow [MVP - Outlook] Microsoft C# .NET 7 1st Aug 2003 06:03 PM
Re: Converting a string to a string that contains the ASCII values of each letter in the origional string Mikael Jansson Microsoft C# .NET 0 31st Jul 2003 08:42 PM
Re: Converting a string to a string that contains the ASCII values of each letter in the origional string Jon Skeet Microsoft C# .NET 0 31st Jul 2003 08:38 PM
Re: Converting a string to a string that contains the ASCII values of each letter in the origional string Frank Oquendo Microsoft C# .NET 0 31st Jul 2003 08:36 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 08:58 AM.