Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のstrcoll()関数とは?使い方・戻り値・サンプルコードを徹底解説


C言語の標準ライブラリ関数 int strcoll(const char *str1, const char *str2) は、文字列 str1str2 を比較するための関数です。比較結果は、現在設定されているロケール(locale)の LC_COLLATE 設定に依存します。

C言語では、文字の配列のことを「文字列」と呼びます。

文字列の宣言

文字列(文字配列)の宣言は、以下のように行います。

char stringname [size];

たとえば char string[50]; と記述すれば、最大50文字分の長さを持つ文字列が定義できます。

文字列の初期化

  • 単一文字定数を使う方法:
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 文字列定数を使う方法:
char string[10] = "Hello";

アクセス方法: 文字列の入出力には制御文字列「%s」を使用します。「%s」は、終端を示すヌル文字「\0」に到達するまで文字列を読み書きします。

strcoll() 関数とは

strcoll() 関数は strcmp() 関数と同様に、2つの文字列を比較し、その結果に応じた整数値を返します。ただし、strcmp() が文字コード(ASCII値)をそのまま比較するのに対し、strcoll() は現在のロケールの照合順序(LC_COLLATE)に従って比較を行うという違いがあります。

宣言

strcoll() 関数の宣言は以下のとおりです。

int strcoll(const char *string1, const char *string2)

各引数の意味は次のとおりです。

  • string1: 比較対象となる第1の文字列
  • string2: 比較対象となる第2の文字列

strcoll() の戻り値

  • > 0: string1 内で最初に一致しなかった文字のASCII値が、string2 の対応する文字より大きい場合

  • < 0: string1 内で最初に一致しなかった文字のASCII値が、string2 の対応する文字より小さい場合

  • = 0: 両方の文字列が完全に等しい場合

サンプルプログラム1

以下の例は、strcoll() 関数の基本的な使い方を示したものです。

#include <stdio.h>
#include <string.h>
int main () {
    char string1[20];
    char string2[20];
    int final;
    strcpy(string1, "WELCOME");
    strcpy(string2, "Welcome to the world!");
    final = strcoll(string1, string2);
    if(final > 0){
        printf("string1 is greater than string2");
    } else if(final < 0) {
        printf("string1 is less than string2");
    } else {
        printf("string1 and string2 are equal");
    }
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

string1 is less than string2

この結果になるのは、大文字の 'W'(ASCII値:87)の方が、小文字の 'W'(ASCII値:119)よりもASCII値が小さいためです。

サンプルプログラム2(実行時に入力して比較)

続いて、プログラムの実行時にユーザーから入力を受け付け、strcoll() を使って2つの文字列を比較する例を見てみましょう。

#include <stdio.h>
int main (){
    char string1[20];
    char string2[20];
    int final;
    printf("enter string1:\n");
    gets(string1);
    printf("enter string2:\n");
    gets(string2);
    final = strcoll(string1, string2);
    if(final > 0){
        printf("string1 is greater than string2");
    }
    else if(final < 0){
        printf("string1 is less than string2");
    }
    else{
        printf("string1 and string2 are equal");
    }
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

enter string1:
Tutorials Point
enter string2:
Point
string1 is greater than string2

注意点

なお、サンプルプログラム2で使用している gets() 関数は、バッファオーバーフローを引き起こす危険があるため、現在では非推奨(廃止予定)とされています。実際の開発では、fgets() などの安全性の高い関数を使うことをおすすめします。

  1. C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説

    C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1

  2. C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説

    C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,