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

Discussion in 'Microsoft C# .NET' started by booksnore, Aug 22, 2005.

  1. booksnore

    booksnore Guest

    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 ***
     
    booksnore, Aug 22, 2005
    #1
    1. Advertisements

  2. 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" <> wrote in message
    news:...
    >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 ***
     
    Ignacio Machin \( .NET/ C# MVP \), Aug 22, 2005
    #2
    1. Advertisements

  3. booksnore

    Guest Guest

    Re: checking to see if a string contains every letter of the alpha

    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" <> wrote in message
    > news:...
    > >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 ***

    >
    >
    >
     
    Guest, Aug 22, 2005
    #3
  4. Re: checking to see if a string contains every letter of the alpha

    KH <> 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 - <>
    http://www.pobox.com/~skeet
    If replying to the group, please do not mail me too
     
    Jon Skeet [C# MVP], Aug 22, 2005
    #4
  5. booksnore

    Guest Guest

    Re: checking to see if a string contains every letter of the alpha

    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 <> 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 - <>
    > http://www.pobox.com/~skeet
    > If replying to the group, please do not mail me too
    >
     
    Guest, Aug 22, 2005
    #5
  6. booksnore

    booksnore Guest

    Re: checking to see if a string contains every letter of the alpha

    Thank you for the replies, they are extremely helpful.


    *** Sent via Developersdex http://www.developersdex.com ***
     
    booksnore, Aug 22, 2005
    #6
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Frank Oquendo
    Replies:
    0
    Views:
    370
    Frank Oquendo
    Jul 31, 2003
  2. Jon Skeet
    Replies:
    0
    Views:
    342
    Jon Skeet
    Jul 31, 2003
  3. Mikael Jansson
    Replies:
    0
    Views:
    303
    Mikael Jansson
    Jul 31, 2003
  4. Jay B. Harlow [MVP - Outlook]
    Replies:
    7
    Views:
    330
    Reginald Blue
    Aug 1, 2003
  5. greatbarrier86

    String.Contains then a String.Replace or just String.Replace

    greatbarrier86, Mar 13, 2009, in forum: Microsoft C# .NET
    Replies:
    2
    Views:
    475
    Tom Overton
    Mar 13, 2009
Loading...

Share This Page