大文字/小文字を区別しないで比較

string を英大文字/英小文字を区別しないで比較します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. string に用意されている文字列の比較関数は、英大文字/英小文字を区別します。
    そこで、英大文字/英小文字を区別しないで比較する関数を作成します。
    ちなみに string に用意されている文字列の比較は「==」を使って int と同様に比較できます。
        string s1,s2;
        s1= "abc";
        s2= "ABC";
    
        if (s1==s2)
            printf("s1 と s2 は等しい\n");
        else
            printf("s1 と s2 は等しく無い\n");
    
  2. ciChar() 関数は、英大文字を英小文字に変換して比較する関数です。
    tolower() で英大文字を英小文字に変換しています。
    /*★ 大文字/小文字を区別しないで比較    前田  稔 ★*/
    #include <stdio.h>
    #include <string>
    using namespace std;
    
    // 1文字の比較
    bool  ciChar(char c1, char c2)
    {
        return tolower(static_cast(c1)) != tolower(static_cast(c2));
    }
    
  3. StrComp() が英大文字/英小文字を区別しないで string を比較する関数です。
    s1 と s2 の長さが違うときは、比較するまでもなく異なる文字列です。
    先頭から一文字ずつ取り出して ciChar() で比較します。
    // 文字列が等しいとき true を返す
    bool  StrComp(const string s1, const string s2)
    {   unsigned	len,i;
    
        len = s1.size();
        if (len!=s2.size())         return false;
        for(i=0; i<len; i++)
        {   if (ciChar(s1.at(i),s2.at(i)))  return false;
        }
        return true;
    }
    
    int main()
    {   string s1,s2;
    
        s1= "abc";
        s2= "ABC";
        if (StrComp(s1,s2)) printf("%s == %s\n",s1.c_str(),s2.c_str());
        else    printf("%s != %s\n",s1.c_str(),s2.c_str());
        s2= "Abc";
        if (StrComp(s1,s2)) printf("%s == %s\n",s1.c_str(),s2.c_str());
        else    printf("%s != %s\n",s1.c_str(),s2.c_str());
        return 0;
    }
    

超初心者のプログラム入門(C/C++)