C言語のstrcoll()関数とは?使い方・戻り値・サンプルコードを徹底解説
C言語の標準ライブラリ関数 int strcoll(const char *str1, const char *str2) は、文字列 str1 と str2 を比較するための関数です。比較結果は、現在設定されているロケール(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() などの安全性の高い関数を使うことをおすすめします。
-
C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説
C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1
-
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,