JFP 開発ガイド

ワイド文字列処理関数

これらの関数のほとんどは、SunOS 5.8 の標準ライブラリlibc のワイド文字列処理関数に基づくマクロです。ここで説明する関数は、過去の日本語システムの日本語用ライブラリ仕様と互換性を保つために提供されています。これらの関数を使用するためには widec.h ではなく、/usr/include/wstring.h を取り込んでください。表 A-1 に、ワイド文字列処理関数 (マクロ) を示します。

表 A-1 ワイド文字列処理関数

関数

機能

wstrcat()

文字列を追加する 

wstrncat()

指定文字数分だけ文字列を追加する 

wstrcmp()

文字列同士の比較を行う 

wstrncmp()

指定文字数分だけ文字列同士の比較を行う 

wstrcpy()

文字列をコピーする 

wstrncpy()

指定文字数分だけ文字列をコピーする 

wstrdup()

malloc を使って文字列をコピーする

wstrchr()

指定文字が最初に現れた文字位置を返す 

wstrrchr()

指定文字が最後に現れた文字位置を返す 

wstrspn()

指定文字列で構成される最初の長さを返す 

wstrcspn()

指定文字列以外で構成される最初の長さを返す 

wstrpbrk()

指定文字列内の文字が最初に現れた文字位置を返す 

wstrlen()

文字列の文字数を返す 

wstrtok()

指定文字で分離される文字列を切り出す 

次の表 A-2 で示す関数は、国際化機能に基づかない日本語固有の日本語処理を含んでおり、libjapanese で提供されます。

表 A-2 日本語固有のワイド文字列処理関数

関数

機能

wstrtol()

主および補助コードセット文字列を long 整数に変換する 

wstrtod()

主および補助コードセット文字列を倍精度に変換する 

例 A-1 は、このワイド文字列処理関数を使って、標準入力ファイル内の主および補助コードセットで書かれた数の合計を計算するプログラム例です。このプログラムでは、getws(3C) 関数で行単位にファイルを読み込んだ後、wstrpbrk(3X) を操作させて整数を求めています。


例 A-1 ワイド文字列処理関数

sun% cat example1.c
#include <stdio.h>
#include <locale.h>
#include <wstring.h>

main()
{
	int total = 0;
	long token;
	wchar_t wbuf[256];
	wchar_t *wptr;

	static char *number = "01234567890123456789";
	static wchar_t wnumber[21];

	setlocale(LC_ALL, "");
	if (mbstowcs(wnumber, number, 20) <= 0) {
		printf("数字列が認識できません。¥n");
		exit(1);
	}
	while (getws(wbuf) != NULL) {
		wptr = wbuf;
		while (wptr && *wptr) {
			wptr = wstrpbrk(wptr, wnumber);
			if (wptr) {
				token = wstrtol(wptr, &wptr, 10);
				printf("トークンの値 = [%d]¥n", token);
				total += token;
			}
		}
	}
	printf("合計は %d です。¥n", total);
}
sun% cat 入力ファイル 1
343 34534
345345 345345
39857 398 5834589
sun% cc -o example1 example1.c -lw -ljapanese
sun% ./example1 < 入力ファイル 1
トークンの値 = [343]
トークンの値 = [34534]
トークンの値 = [345345]
トークンの値 = [345345]
トークンの値 = [39857]
トークンの値 = [398]
トークンの値 = [5834589]
合計は 6600411 です。
sun%