C/C++のstrcoll()関数とは?使い方と戻り値をわかりやすく解説
strcoll()関数とは
C言語およびC++のstrcoll()関数は、現在設定されているロケール(locale)に基づく照合順序(collating sequence)に従って、2つの文字列を比較するための関数です。ヘッダーファイル <string.h> 内で宣言されています。
一般的な strcmp() 関数がバイト値そのものを比較するのに対し、strcoll() はロケールの LC_COLLATE カテゴリで定義された照合規則を反映して比較を行う点が大きな特徴です。そのため、アクセント記号付きの文字や、特定の言語で定められた文字の並び順を正しく扱いたい場合に適しています。
戻り値
strcoll()関数は、比較結果として以下の整数値を返します。
- 0(ゼロ):両方の文字列が同一の場合
- 0より大きい値:第1引数の文字列が第2引数の文字列より大きい場合
- 0より小さい値:第1引数の文字列が第2引数の文字列より小さい場合
構文
C言語におけるstrcoll()関数の構文は以下の通りです。
int strcoll(const char *first_string, const char *second_string);
- first_string:比較対象となる最初の文字列へのポインタ
- second_string:比較対象となる2番目の文字列へのポインタ
使用例
以下は、C言語でstrcoll()関数を使って2つの文字列を比較するサンプルプログラムです。
#include <stdio.h>
#include <string.h>
int main () {
const char s1[] = "Helloworld";
const char s2[] = "Blank";
int result;
result = strcoll(s1, s2);
if(result > 0)
printf("文字列s1は文字列s2より大きい\n");
else if(result < 0)
printf("文字列s1は文字列s2より小さい\n");
else
printf("両方の文字列は同じです\n");
return(0);
}
実行結果
文字列s1は文字列s2より大きい
まとめ
strcoll()関数は、ロケールに依存した文字列比較が必要な場面で役立つ便利な関数です。単純なバイト比較で十分な場合は strcmp() を、多言語対応アプリケーションなどで正しい辞書順の比較が必要な場合は strcoll() を使うとよいでしょう。戻り値の符号によって文字列の大小関係を簡単に判定できる点も覚えておくと実践的です。
-
C/C++で文字列を反転する方法をサンプルコード付きで解説
C言語で文字列を反転(逆順に並べ替え)する方法を、実際のコード例とともにわかりやすく解説します。サンプルコード#include<stdio.h> #include<string.h> int main() { char s[50], t; int i = 0, j = 0; printf(\nEnter the string to reverse :); gets(s); &
-
C++で文字列をトークン化(分割)する2つの方法を解説
文字列のトークン化(分割)とは、1つの文字列を区切り文字(スペースやカンマなど)を基準に、複数の部分文字列へ分割する処理のことです。C++では、標準ライブラリだけでもいくつかの方法で実現できます。本記事では、代表的な2つの方法をサンプルコード付きで紹介します。方法1:stringstreamを使って空白で分割する1つ目の方法は、stringstreamを使ってスペースで区切られた単語を順に読み取る方法です。この方法はやや制限がありますが、適切なチェックを加えれば十分に目的を果たすことができます。サンプルコード#include <vector> #include <string