SLLIB + SFITSIO ダイジェスト版 HTML マニュアル

使用頻度の高い API について,主要な内容を記述した, ビギナー向けのリファレンスマニュアルです.

SLLIB クラス: ストリーム / 文字列 / 文字列配列 / 文字列連想配列 / 多次元配列
SLLIB クラス用関数: 多次元配列用の統計用関数 / 多次元配列用の数学関数 / 多次元配列用の複素関数
SLLIB クラス以外: 定数・型の定義 / C99互換の複素数・複素関数
SFITSIO クラス: fitscc / fits_hdu / fits_image / fits_table / fits_table_col / fits_header / fits_header_record
SFITSIO クラス以外: 関数 / 定数・型の定義 / FITSファイルの部分読み出し機能 / FITSテンプレート / 規約外FITS拡張

SLLIB: 文字列 (tstringクラス)

tstring クラスは,スクリプト言語のような強力な文字列処理用 API を持ち, かつ LIBC の stdio.h,string.h,strings.h,stdlib.h,ctype.h で提供される 関数とそっくりの文字列処理が行えるAPIを提供します. 文字列バッファはほぼ完全な自動管理であり,かつ 文字列の位置はすべて 0-indexed の整数値で扱うため, 文字列に対するアドレスを使う事がほとんど無く高い安全性を確保します. 下記のような機能を持ちます.

tstring クラスは単独のクラスです.継承関係はありません.

クラスヘッダファイルコードnamespace
tstring #include <sli/tstring.h> cc sli

メンバ関数一覧

基本機能のためのメンバ関数:

メンバ関数機能
大括弧 [] [] で指定された位置の文字の参照(unsigned char型)を返す
イコール記号 = 文字列の代入
length() 文字列の長さ('\0'は含まない)を取得
cstr(), c_str() 文字列の先頭アドレスを取得 (読取専用)
cchr() 自身が持つ文字列の位置 pos にある文字(int型)を返す
at(), at_cs() 自身が持つ文字列の位置 pos にある文字の参照(unsigned char型)を返す
dprint() オブジェクト情報を標準エラー出力へ出力
getstr() (部分)文字列を外部バッファにコピー
copy() (部分)文字列を外部オブジェクトにコピー
swap() 2つのオブジェクト間での内容のスワップ
init() オブジェクトの初期化
assign() 文字列を代入
printf(), assignf() printf()の記法で文字列を代入

文字列の編集のためのメンバ関数:

メンバ関数機能
implode() 文字列のポインタ配列を,区切り文字列 delim で結合
put() 指定された文字列により,指定位置から上書き
putf() printf()の記法で指定された文字列により,指定位置から上書き
append() 文字列の追加
appendf() printf()の記法で指定された文字列を追加
insert() 文字列の挿入
insertf() printf()の記法で指定された文字列を指定位置へ挿入
replace() 文字列の置換
replacef() 指定部分を printf()の記法で指定された文字列で置換
erase() 文字列の消去
clean() 既存の文字列全体を任意の文字でパディング
resize() 文字列の長さを変更
resizeby() 文字列の長さを相対的に変更
crop() 文字列の一部分以外を消去
chomp() 文字列の右端の改行文字の除去
trim() 文字列の両端の不要文字の除去
ltrim() 文字列の左端の不要文字の除去
rtrim() 文字列の右端の不要文字の除去
strreplace() 文字列の単純検索と置換
regreplace() 拡張正規表現による置換
tolower() 大文字を小文字に変換
toupper() 小文字を大文字に変換

文字列の変換のためのメンバ関数:

メンバ関数機能
atoi() 文字列を10進の整数値(int型)に変換
atol() 文字列を10進の整数値(long型)に変換
atoll() 文字列を10進の整数値(long long型)に変換
atof() 文字列を実数値(double型)に変換
strtol() 文字列を指定された基数で整数値(long型)に変換
strtoll() 文字列を指定された基数で整数値(long long型)に変換
strtoul() 文字列を指定された基数で符号無し整数値(unsigned long型)に変換
strtoull() 文字列を指定された基数で符号無し整数値(unsigned long long型)に変換
strtod() 文字列を実数値(double型)に変換
scanf() 文字列を format の指定に従って変換

文字列の比較・検索のためのメンバ関数:

メンバ関数機能
strcmp() 文字列の辞書的な比較
strncmp() 文字列の辞書的な部分比較
strcasecmp() 大文字・小文字を区別しない文字列の辞書的な比較
strncasecmp() 大文字・小文字を区別しない文字列の辞書的な部分比較
isalnum(), isalpha(), 等 文字の分類
strchr() 左側からの文字の検索
strstr() 左側からの文字列の検索
strrchr() 右側からの文字の検索
strrstr() 右側からの文字列の検索
strpbrk() 左側から文字セットに含まれる文字を検索
strrpbrk() 右側から文字セットに含まれる文字を検索
strspn() 文字セットに含まれる文字が連続する長さを取得
strrspn() 文字セットに含まれる文字が連続する長さを取得 (右方向から検索)
strcspn() 文字セットに含まれない文字が連続する長さを取得
strmatch() シェルのワイルドカードパターンを用いた文字列マッチを試行
fnmatch() シェルのワイルドカードパターンを用いた文字列マッチ (ファイル名向き)
pnmatch() シェルのワイルドカードパターンを用いた文字列マッチ(パス名向き)
regmatch() 拡張正規表現による文字列マッチを試行
find_quoted() 文字列を左側からパースし,クォーテーションまたは括弧の対応関係を取得
rfind_quoted() 文字列を右側からパースし,クォーテーションまたは括弧の対応関係を取得

基本機能のためのメンバ関数

大括弧 []

unsigned char &operator[]( size_t pos );              ... 1
const unsigned char &operator[]( size_t pos ) const;  ... 2

[] で指定された位置の文字の参照(unsigned char型)を返します.

pos (0-indexed) に文字列長以上の値を指定した場合, メンバ関数1では文字列の長さが自動拡張されますが, メンバ関数2では例外が発生します.

返り値
指定された位置にある文字の参照

イコール記号 =

const char *operator=(const char *str);  ... 1
tstring &operator=(const tstring &obj);  ... 2

演算子の右側(引数) で指定したオブジェクト・文字列を自身に代入をします.

返り値
メンバ関数1の場合,内部バッファの先頭アドレス (バッファ未確保の場合は NULL)
メンバ関数2の場合,自身の参照

length()

size_t length() const;

文字列の長さ('\0'は含まない)を返します.


cstr(), c_str()

const char *cstr() const;
const char *c_str() const;

内部バッファ(文字列)の先頭アドレス(読取専用)を返します. バッファ未確保の場合は NULL を返します.


cchr()

int cchr( size_t pos ) const;

自身が持つ文字列の位置 pos (0-indexed) にある文字(int型)を返します.


at()

unsigned char &at( size_t pos );                 ... 1
const unsigned char &at( size_t pos ) const;     ... 2
const unsigned char &at_cs( size_t pos ) const;  ... 3

文字列の位置 pos (0-indexed) にある文字の参照(unsigned char型)を返します. メンバ関数2,3 の場合は,読み取り専用です.

pos に文字列長以上の値を指定した場合, メンバ関数1では文字列の長さが自動拡張されますが, メンバ関数2,3では例外が発生します.


dprint()

void dprint( const char *msg = NULL ) const;

自身のオブジェクト情報を標準エラー出力へ出力します. 引数 msg を指定すると,オブジェクト情報と同時に msg の内容を表示します.


getstr()

ssize_t getstr( char *dest_str, size_t buf_size ) const;
ssize_t getstr( size_t pos, char *dest_str, size_t buf_size ) const;

自身の文字列を,buf_size バイトの長さを持つ 外部バッファ dest_str にコピーします. 自身の文字列の途中からコピーしたい場合は,コピーの開始位置 pos (0-indexed) を指定してください.

返り値
成功した場合は, バッファ長が十分な場合にコピーできる文字数('\0' は含まない)
エラーの場合は,負値

copy()

ssize_t copy( tstring *dest ) const;
ssize_t copy( size_t pos, tstring *dest ) const;
ssize_t copy( size_t pos, size_t n, tstring *dest ) const;

自身の文字列を,dest で指定されたオブジェクトにコピー します. 自身の文字列の一部をコピーしたい場合は, コピーの開始位置 pos (0-indexed),コピーされる文字数 n を 指定してください.

返り値
成功した場合は, バッファ長が十分な場合にコピーできる文字数('\0' は含まない)
エラーの場合は,負値

swap()

tstring &swap( tstring &sobj );

オブジェクト sobj の内容と自身の内容とを入れ替えます.

返り値
自身の参照

init()

tstring &init();
tstring &init(const tstring &obj);

自身の初期化を行います. 引数 obj が指定された場合,その内容で自身を初期化します.

返り値
自身の参照

assign()

tstring &assign( int ch, size_t n );                            ... 1
tstring &assign( const char *str );                             ... 2
tstring &assign( const char *str, size_t n );                   ... 3
tstring &assign( const tstring &src, size_t pos2 = 0 );         ... 4
tstring &assign( const tstring &src, size_t pos2, size_t n2 );  ... 5

引数で指定された文字列を,自身に代入します.

メンバ関数1は,n 文字の文字 ch からなる文字列を 自身へ代入します.

メンバ関数2, 3は,str で示された文字列を自身に代入します. str の部分文字列をコピーする場合は,引数 n を指定します.

メンバ関数4, 5は,src で示されたオブジェクトが持つ文字列を自身に代入します. src の部分文字列をコピーする場合は, コピーの開始位置 pos2 (0-indexed),コピーされる文字数 n2 を 指定してください.

返り値
自身の参照

printf(), assignf()

tstring &printf( const char *format, ... );
tstring &assignf( const char *format, ... );

printf()の記法で指定された文字列を自身に代入します.

返り値
自身の参照

文字列の編集のためのメンバ関数

implode()

tstring &implode( const char *const *arr, const char *delim );

引数 arr で指定された文字列のポインタ配列(NULL終端)を読み込み, 区切り文字列 delim で結合して自身に格納します.

返り値
自身の参照

put()

tstring &put( size_t pos1, int ch, size_t n );                           ... 1
tstring &put( size_t pos1, const char *str );                            ... 2
tstring &put( size_t pos1, const char *str, size_t n );                  ... 3
tstring &put( size_t pos1, const tstring &src, size_t pos2 = 0 );        ... 4
tstring &put( size_t pos1, const tstring &src, size_t pos2, size_t n2);  ... 5

自身の文字列を位置 pos から,引数で指定された文字列で上書きします. 内部バッファが足りない場合,自動的にバッファを拡張します.

メンバ関数1は, n 文字の文字 ch からなる文字列を,自身が持つ文字列の 位置 pos1 に書き込みます.

メンバ関数2, 3は, 文字列 str を自身が持つ文字列の位置 pos1 に書き込みます. str の部分文字列を対象とする場合は,引数 n を指定します.

メンバ関数4, 5は, オブジェクト src が持つ文字列の位置 pos2 からの文字列を, 自身が持つ文字列の位置 pos1 に書き込みます. src の部分文字列を対象とする場合は, 開始位置 pos2 (0-indexed),文字数 n2 を指定してください.

返り値
自身の参照

putf()

tstring &putf( size_t pos, const char *format, ... );

自身の文字列を位置 pos から, 引数 format 以降の printf() の記法で指定された文字列で上書きします. 内部バッファが足りない場合,自動的にバッファを拡張します.

返り値
自身の参照

append()

tstring &append( int ch, size_t n );                            ... 1
tstring &append( const char *str );                             ... 2
tstring &append( const char *str, size_t n );                   ... 3
tstring &append( const tstring &src, size_t pos2 = 0 );         ... 4
tstring &append( const tstring &src, size_t pos2, size_t n2 );  ... 5

自身の文字列に,引数で指定された文字列を追加します.

メンバ関数1は, n 文字の文字 ch からなる文字列を, 自身が持つ文字列の終端に追加します.

メンバ関数2, 3は, 文字列 str を自身が持つ文字列の終端に追加します. str の部分文字列を対象とする場合は,引数 n を指定します.

メンバ関数4, 5は, オブジェクト src が持つ文字列の位置 pos2 からの文字列を, 自身の文字列の終端に追加します. src の部分文字列を対象とする場合は, 開始位置 pos2 (0-indexed),文字数 n2 を指定してください.

返り値
自身の参照

appendf()

tstring &appendf( const char *format, ... );

自身の文字列に, 引数 format 以降の printf() の記法で指定された文字列 を追加します.

返り値
自身の参照

insert()

tstring &insert( size_t pos1, int ch, size_t n );                     ... 1
tstring &insert( size_t pos1, const char *str );                      ... 2
tstring &insert( size_t pos1, const char *str, size_t n );            ... 3
tstring &insert( size_t pos1, const tstring &src, size_t pos2 = 0 );  ... 4
tstring &insert( size_t pos1, 
                 const tstring &src, size_t pos2, size_t n2 );        ... 5

自身の文字列の位置 pos1 に,引数で指定された文字列を挿入します.

メンバ関数1は,n 文字の文字 ch からなる文字列を, 自身が持つ文字列の位置 pos1 に挿入します.

メンバ関数2, 3は,文字列 str を 自身が持つ文字列の位置 pos1 に挿入します. str の部分文字列を対象とする場合は,引数 n を指定します.

メンバ関数4, 5は, オブジェクト src が持つ文字列の位置 pos2 からの文字列を, 自身が持つ文字列の位置 pos1 に挿入します. src の部分文字列を対象とする場合は, 開始位置 pos2 (0-indexed),文字数 n2 を指定してください.

返り値
自身の参照

insertf()

tstring &insertf( size_t pos1, const char *format, ... );

自身の文字列の位置 pos1 に, 引数 format 以降の printf() の記法で指定された文字列 を挿入します.

返り値
自身の参照

replace()

tstring &replace( size_t pos1, size_t n1, int ch, size_t n2 );           ... 1
tstring &replace( size_t pos1, size_t n1, const char *str );             ... 2
tstring &replace( size_t pos1, size_t n1, const char *str, size_t n2 );  ... 3
tstring &replace( size_t pos1, size_t n1, 
                  const tstring &src, size_t pos2 );                     ... 4
tstring &replace( size_t pos1, size_t n1, 
                  const tstring &src, size_t pos2, size_t n2 );          ... 5

自身の文字列の位置 pos1 から n1 文字を,指定された文字列で置き換えます.

メンバ関数1は, 自身が持つ文字列の pos1 の位置から n1 文字を, n2 文字の文字 ch からなる文字列で置換します.

メンバ関数2, 3は, 自身が持つ文字列の位置 pos1 から n1 文字を, 文字列 str で置換します. str の部分文字列を対象とする場合は,引数 n2 を指定します.

メンバ関数4, 5は, 自身が持つ文字列の位置 pos1 から n1 文字を, オブジェクト src が持つ文字列の位置 pos2 からの文字 列で置換します. src の部分文字列を対象とする場合は, 開始位置 pos2 (0-indexed),文字数 n2 を指定してください.

返り値
自身の参照

replacef()

tstring &replacef( size_t pos1, size_t n1, const char *format, ... );

自身の文字列の位置 pos1 から n1 文字を, 引数 format 以降の printf() の記法で指定された文字列 で置き換えます.

返り値
自身の参照

erase()

tstring &erase();                            ... 1
tstring &erase( size_t pos, size_t n = 1 );  ... 2

自身が持つ文字列の文字を消去します.

メンバ関数1は,すべての文字を消去します(文字列長はゼロになります).

メンバ関数2は,位置 pos から n 文字を消去します. n が指定されない場合は,1文字を消去します.

返り値
自身の参照

clean()

tstring &clean( int ch = ' ' );

自身が持つ文字列全体を,文字 ch でパディングします.

返り値
自身の参照

resize()

tstring &resize( size_t len );

自身が持つ文字列の長さを len に変更します. 文字列長を拡張する場合, 空白文字 ' ' からなる文字列が追加されます.

返り値
自身の参照

resizeby()

tstring &resizeby( ssize_t len );

自身が持つ文字列の長さを len の長さ分だけ変更します. 文字列長を拡張する場合, 空白文字 ' ' からなる文字列が追加されます.

返り値
自身の参照

crop()

tstring &crop( size_t pos );            ... 1
tstring &crop( size_t pos, size_t n );  ... 2

自身の文字列の一部分以外を消去します.

メンバ関数1は, 自身の文字列を,位置 pos から終端までの文字列だけにします.

メンバ関数2は, 自身の文字列を,位置 pos から n 個の文字列だけにします.

文字列長以上の値を pos に指定した場合,自身の文字列長は 0 になります.

返り値
自身の参照

chomp()

tstring &chomp( const char *rs = "\n" );

自身が持つ文字列の右端の改行文字を除去します.

返り値
自身の参照

trim()

tstring &trim( int side_space );                           ... 1
tstring &trim( const char *side_spaces = " \t\n\r\f\v" );  ... 2
tstring &trim( const tstring &side_spaces );               ... 3

自身が持つ文字列の両端にある任意文字を除去します.

メンバ関数1 では,引数に除去される文字を与え, メンバ関数2, 3 では,引数に除去される文字セットを与えます.

メンバ関数2, 3の side_spaces には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

返り値
自身の参照

ltrim()

tstring <rim( int side_space );                           ... 1
tstring <rim( const char *side_spaces = " \t\n\r\f\v" );  ... 2
tstring <rim( const tstring &side_spaces );               ... 3

自身が持つ文字列の左端の任意文字を除去します.

メンバ関数1 では,引数に除去される文字を与え, メンバ関数2, 3 では,引数に除去される文字セットを与えます.

メンバ関数2, 3の side_spaces には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

返り値
自身の参照

rtrim()

tstring <rim( int side_space );                           ... 1
tstring <rim( const char *side_spaces = " \t\n\r\f\v" );  ... 2
tstring <rim( const tstring &side_spaces );               ... 3

自身が持つ文字列の右端の任意文字を除去します.

メンバ関数1 では,引数に除去される文字を与え, メンバ関数2, 3 では,引数に除去される文字セットを与えます.

メンバ関数2, 3の side_spaces には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

返り値
自身の参照

strreplace()

ssize_t strreplace( const char *org_str, 
                    const char *new_str, bool all = false );
ssize_t strreplace( size_t pos, const char *org_str, 
                    const char *new_str, bool all = false );

自身が持つ文字列の左側の pos の位置から文字列 org_str を検索し, 見つかった場合は文字列 new_str で置き換えます. pos が指定されていない場合は,左端から検索します.

これらのメンバ関数は,置換が行なわれた場合は 置換された文字列の次の位置を返します. この返り値を pos に与えれば,次に org_str が見つかった部分を置換できます.

最後の引数 all が true の場合は, マッチするすべての部分を new_str で置き換えます.

返り値
指定した文字列が見つかった場合,置換された文字列の次の位置
指定した文字または文字列が見つからなかった場合やエラーの場合は負値

regreplace()

ssize_t regreplace( const char *pat, 
                    const char *new_str, bool all = false );  ... 1
ssize_t regreplace( size_t pos, const char *pat, 
                    const char *new_str, bool all = false );  ... 2
ssize_t regreplace( const tregex &pat, 
                    const char *new_str, bool all = false );  ... 3
ssize_t regreplace( size_t pos, const tregex &pat,
                    const char *new_str, bool all = false );  ... 4

自身の文字列に対し,pat で指定された POSIX拡張正規表現(以下,正規表現)でマッチした部分を文字列 new_str で置き換えます. new_str では,後方参照 "\\0""\\9" が利用できます("\\0"はマッチした部分全体を示します). バックスラッシュ自身を与えたい場合は, "\\\\" を指定します.

これらのメンバ関数は,置換が行なわれた場合は 置換された文字列の次の位置を返します. この返り値を pos に与えれば,次にマッチする部分を置換で きます.

最後の引数 all が true の場合は, マッチするすべての部分を new_str で置き換えます.

regreplace()メンバ関数は,正規表現マッチ結果が格納される オブジェクト内部バッファを更新します. 引数 all が false の場合, 保存された正規表現マッチの結果は,メンバ関数 reg_elem_length(),reg_pos(), reg_length(),reg_cstr(),reg_cstrarray() を使って取得する事ができます. それぞれ,結果の要素数,マッチした部分の位置, マッチした部分の文字列長,マッチした部分の文字列, マッチした部分の文字列に対するポインタ配列 を返します.これらのメンバ関数のプロトタイプは次の通りです.

size_t reg_elem_length() const;
size_t reg_pos( size_t idx ) const;
size_t reg_length( size_t idx ) const;
const char *reg_cstr( size_t idx ) const;
const char *const *reg_cstrarray() const;

引数 idx には,0から始まる要素番号を指定します. 0番目には,マッチした文字列全体の情報が格納され, 1番目からは,正規表現「(...)」それぞれにマッチした 部分文字列の情報が格納されます (つまり,後方参照のための情報です). reg_cstrarray() メンバ関数の返り値を, tarray_tstringクラス のオブジェクトに = 演算子で代入する事もできます.

引数 all が true の場合は,正規表現マッチ結果がリセット されるので結果情報を取得できません.

メンバ関数1, 2 の場合,正規表現 pat をコンパイルし, その結果を自身が持つ内部バッファに保存し,マッチを行ないます (pat が前回と同じ場合は,再コンパイルしません). 正規表現のコンパイルに失敗すると, 標準エラー出力にその内容を出力します.

メンバ関数3, 4 の場合,正規表現のコンパイル結果を保持 している tregex クラスのオブジェクトを指定します. したがって,regreplace()メンバ関数を使う前に, あらかじめtregexクラスのcompile()メンバ関数で 正規表現をコンパイルする 必要があります.

自身が持つ文字列の位置 pos から 右方向に文字列マッチを試行します. 文字列マッチが試行される対象範囲は, 文字列終端の '\0' が現れるまでです (改行文字 '\n' が現れても処理は終了しません). pos が指定されない場合は, 自身の文字列の左端から探します.

正規表現の詳細は regmatch() の解説を参照してください.

より単純な検索による置換を行なう場合は,処理速度で有利な strreplace() メンバ関数を推奨します.

返り値
マッチした場合,置換された文字列の次の位置
マッチしなかった場合やエラーの場合は,負値

tolower()

tstring &tolower( size_t pos = 0 );
tstring &tolower( size_t pos, size_t n );

自身の文字列が持つアルファベットの大文字を小文字に変換します. 文字列の一部を変換する場合は,開始位置 pos と長さ n を指定してください.

返り値
自身の参照

toupper()

tstring &toupper( size_t pos = 0 );
tstring &toupper( size_t pos, size_t n );

自身の文字列が持つアルファベットの小文字を大文字に変換します. 文字列の一部を変換する場合は,開始位置 pos と長さ n を指定してください.

返り値
自身の参照

文字列の変換のためのメンバ関数

atoi()

int atoi( size_t pos = 0 ) const;
int atoi( size_t pos, size_t n ) const;

自身が持つ文字列を,10 進の整数値に変換し,返します. 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

[0-9] 以外の文字(ただし,先頭の符号は除く)が 現れた時点で変換は終了します

返り値
整数値

atol()

long atol( size_t pos = 0 ) const;
long atol( size_t pos, size_t n ) const;

自身が持つ文字列を,10 進の整数値に変換し,返します. 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

[0-9] 以外の文字(ただし,先頭の符号は除く)が 現れた時点で変換は終了します

返り値
整数値

atoll()

long long atoll( size_t pos = 0 ) const;
long long atoll( size_t pos, size_t n ) const;

自身が持つ文字列を,10 進の整数値に変換し,返します. 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

[0-9] 以外の文字(ただし,先頭の符号は除く)が 現れた時点で変換は終了します

返り値
整数値

atof()

double atof( size_t pos = 0 ) const;
double atof( size_t pos, size_t n ) const;

自身が持つ文字列を実数値に変換し,返します. 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

文字列に実数値として取り扱う事が出来ない文字がある場合, それ以降の文字は処理しません.

実数値に変換できる文字列は10進数, 16進数("0x"または"0X"から始まる), 無限,NAN(非数)のいずれかです. 10進数の場合は,少数点を含む実数表示, 'E' または 'e' から始まる指数部を含む指数表示, FORTRAN形式の倍精度指数表示(例えば,"1.2345D-10") に対応しています.

無限は "INF" または "INFINITY" で表され, 大文字小文字は区別されません. NAN は "NAN" (大文字小文字は区別されない)で表され, その後に '(文字列)' が続く場合もあります.

内部で LIBC の strtod() を使用しています.

返り値
実数値

strtol()

long strtol( int base, size_t *endpos ) const;
long strtol( size_t pos, int base, size_t *endpos ) const;
long strtol( size_t pos, size_t n, int base, size_t *endpos ) const;

自身の文字列を,基数 base で整数値に変換し,返します. 変換されなかった文字の位置を *endpos に返します (この情報が不要な場合は endpos に NULL を与える事ができます). 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

引数 base は 2 から 36 までの値,あるいは 0 を指定できます. 0 または 16 が指定された場合には,文字列の先頭に '0x' を置く事ができ,文字列は16進数として扱われます. これ以外の文字列で base が 0 の場合には, 文字列が '0' で始まる時は8進数として, それ以外の時は10進数として扱われます.

返り値
整数値

strtoll()

long long strtoll( int base, size_t *endpos ) const;
long long strtoll( size_t pos, int base, size_t *endpos ) const;
long long strtoll( size_t pos, size_t n, int base, size_t *endpos ) const;

自身の文字列を,基数 base で整数値に変換し,返します. 変換されなかった文字の位置を *endpos に返します (この情報が不要な場合は endpos に NULL を与える事ができます). 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

引数 base は 2 から 36 までの値,あるいは 0 を指定できます. 0 または 16 が指定された場合には,文字列の先頭に '0x' を置く事ができ,文字列は16進数として扱われます. これ以外の文字列で base が 0 の場合には, 文字列が '0' で始まる時は8進数として, それ以外の時は10進数として扱われます.

返り値
整数値

strtoul()

unsigned long strtoul( int base, size_t *endpos ) const;
unsigned long strtoul( size_t pos, int base, size_t *endpos) const;
unsigned long strtoul( size_t pos, size_t n, int base, size_t *endpos ) const;

自身の文字列を,基数 base で符号無し整数値に変換し,返します. 変換されなかった文字の位置を *endpos に返します (この情報が不要な場合は endpos に NULL を与える事ができます). 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

引数 base は 2 から 36 までの値,あるいは 0 を指定できます. 0 または 16 が指定された場合には,文字列の先頭に '0x' を置く事ができ,文字列は16進数として扱われます. これ以外の文字列で base が 0 の場合には, 文字列が '0' で始まる時は8進数として, それ以外の時は10進数として扱われます.

返り値
整数値

strtoull()

unsigned long long strtoull( int base, size_t *endpos ) const;
unsigned long long strtoull( size_t pos, int base, size_t *endpos ) const;
unsigned long long strtoull( size_t pos, size_t n,
                             int base, size_t *endpos ) const;

自身の文字列を,基数 base で符号無し整数値に変換し,返します. 変換されなかった文字の位置を *endpos に返します (この情報が不要な場合は endpos に NULL を与える事ができます). 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

引数 base は 2 から 36 までの値,あるいは 0 を指定できます. 0 または 16 が指定された場合には,文字列の先頭に '0x' を置く事ができ,文字列は16進数として扱われます. これ以外の文字列で base が 0 の場合には, 文字列が '0' で始まる時は8進数として, それ以外の時は10進数として扱われます.

返り値
整数値

strtod()

double strtod( size_t *endpos ) const;
double strtod( size_t pos, size_t *endpos ) const;
double strtod( size_t pos, size_t n, size_t *endpos ) const;

自身が持つ文字列を実数値に変換し,返します. 変換されなかった文字の位置を *endpos に返します (この情報が不要な場合は endpos に NULL を与える事ができます). 文字列の一部を変換対象とする場合は,開始位置 pos と長さ n を指定してください.

文字列に実数値として取り扱う事が出来ない文字がある場合, それ以降の文字は処理しません.

実数値に変換できる文字列は10進数, 16進数("0x"または"0X"から始まる), 無限,NAN(非数)のいずれかです. 10進数の場合は,少数点を含む実数表示, 'E' または 'e' から始まる指数部を含む指数表示, FORTRAN形式の倍精度指数表示(例えば,"1.2345D-10") に対応しています.

無限は "INF" または "INFINITY" で表され, 大文字小文字は区別されません. NAN は "NAN" (大文字小文字は区別されない)で表され, その後に '(文字列)' が続く場合もあります.

内部で LIBC の strtod() を使用しています.

返り値
実数値

scanf()

int scanf( const char *format, ... ) const;

自身の文字列を format の指定に従って変換し,format 以降の引数に格納します.

詳細は LIBC の sscanf() のマニュアルを参照してください.

返り値
成功した場合,読み込みと変換が成功した入力要素の個数
引数が不正な場合など,エラーの場合は EOF
注意
format に "%s" を指定する場合, 格納バッファの大きさ以上の文字列が入力されると バッファオーバーランが発生します. この問題は,下記のように最大フィールド幅を指定して読み込む事で 回避できます.
    char c_buf0[20], c_buf1[20];
    str.scanf("%19s%*[^ ] %19s%*[^ ]",c_buf0,c_buf1);
%*[^ ] は空白以外の文字からなる文字列を 読み飛ばすための指定です.

文字列の比較・検索のためのメンバ関数

strcmp()

int strcmp( const char *str ) const;
int strcmp( size_t pos1, const char *str ) const;
int strcmp( const tstring &str, size_t pos2 = 0 ) const;
int strcmp( size_t pos1, const tstring &str, size_t pos2 = 0 ) const;

自身の文字列と指定された文字列 str とを,辞書的に比較し,その結果を返します. 開始位置から全ての文字を比較します.

文字列の途中から比較したい場合, pos1 には自身の文字列の比較開始位置を, pos2 には文字列 str の比較開始位置をそれぞれ指定します.

返り値
自身の文字列が str と等しい場合は0
自身の文字列が str に較べて辞書的に大きい場合は正値
自身の文字列が str に較べて辞書的に小さい場合は負値
自身が文字列バッファを持ち,str に NULL を指定した場合は256(エラー)
自身が文字列バッファを持たず,str を指定した場合は-256(エラー)

strncmp()

int strncmp( const char *str, size_t n ) const;
int strncmp( size_t pos1, const char *str, size_t n ) const;
int strncmp( const tstring &str, size_t pos2, size_t n ) const;
int strncmp( size_t pos1, const tstring &str, size_t pos2, size_t n ) const;

自身の文字列と指定された文字列 str とを,辞書的に比較し,その結果を返します. 開始位置から最初の n 文字を比較します.

文字列の途中から比較したい場合, pos1 には自身の文字列の比較開始位置を, pos2 には文字列 str の比較開始位置をそれぞれ指定します.

返り値
自身の文字列が str と等しい場合は0
自身の文字列が str に較べて辞書的に大きい場合は正値
自身の文字列が str に較べて辞書的に小さい場合は負値
自身が文字列バッファを持ち,str に NULL を指定した場合は256(エラー)
自身が文字列バッファを持たず,str を指定した場合は-256(エラー)

strcasecmp()

int strcasecmp( const char *str ) const;
int strcasecmp( size_t pos1, const char *str ) const;
int strcasecmp( const tstring &str, size_t pos2 = 0 ) const;
int strcasecmp( size_t pos1, const tstring &str, size_t pos2 = 0 ) const;

自身の文字列と指定された文字列 str とを, アルファベットの大文字と小文字を区別せず辞書的に比較し, その結果を返します. 開始位置から全ての文字を比較します.

文字列の途中から比較したい場合, pos1 には自身の文字列の比較開始位置を, pos2 には文字列 str の比較開始位置をそれぞれ指定します.

返り値
自身の文字列が str と等しい場合は0
自身の文字列が str に較べて辞書的に大きい場合は正値
自身の文字列が str に較べて辞書的に小さい場合は負値
自身が文字列バッファを持ち,str に NULL を指定した場合は256(エラー)
自身が文字列バッファを持たず,str を指定した場合は-256(エラー)

strncasecmp()

int strncasecmp( const char *str, size_t n ) const;
int strncasecmp( size_t pos1, const char *str, size_t n ) const;
int strncasecmp( const tstring &str, size_t pos2, size_t n ) const;
int strncasecmp( size_t pos1, const tstring &str,
                 size_t pos2, size_t n ) const;

自身の文字列と指定された文字列 str とを, アルファベットの大文字と小文字を区別せず辞書的に比較し, その結果を返します. 開始位置から最初の n 文字を比較します.

返り値
自身の文字列が str と等しい場合は0
自身の文字列が str に較べて辞書的に大きい場合は正値
自身の文字列が str に較べて辞書的に小さい場合は負値
自身が文字列バッファを持ち,str に NULL を指定した場合は256(エラー)
自身が文字列バッファを持たず,str を指定した場合は-256(エラー)

isalpha(), isalnum(), isdigit(), islower(), isupper(), 他

bool isalnum( size_t pos ) const; 
bool isalpha( size_t pos ) const;
bool iscntrl( size_t pos ) const;
bool isdigit( size_t pos ) const;
bool isgraph( size_t pos ) const;
bool islower( size_t pos ) const;
bool isprint( size_t pos ) const;
bool ispunct( size_t pos ) const;
bool isspace( size_t pos ) const;
bool isupper( size_t pos ) const;
bool isxdigit( size_t pos ) const;

自身が持つ文字列の位置 pos にある文字を,現在のロケールにより分類し, その結果を返します. それぞれのメンバ関数の機能は次の表のとおりです.

メンバ関数 機能
isalnum() 英字または数字かを調べる
isalpha() アルファベットかどうか調べる
iscntrl() 制御文字かどうかを調べる
isdigit() 数字(0〜9)かどうかを調べる
isgraph() 表示可能な文字かどうかを調べる
islower() 小文字かどうかを調べる
isprint() 表示可能な文字かどうかを調べる(空白を含む)
ispunct() 表示可能な文字かどうかを調べる(空白と英数字を除く)
isspace() 空白文字かどうかを調べる
isupper() 大文字かどうかを調べる
isxdigit() 16進数での数字かどうかを調べる

詳細は LIBC の isalnum() のマニュアルを参照してください.

返り値
一致する場合は true
不一致である場合は false

strchr()

ssize_t strchr( int ch ) const;
ssize_t strchr( size_t pos, int ch ) const;
ssize_t strchr( size_t pos, int ch, size_t *nextpos ) const;

自身が持つ文字列の左側から右方向に文字 ch を検索し, 最初に出現する位置を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. nextpos の指す変数には,文字が見つかった場合は見つかった位置の1つ右の位置が, 見つからなかった場合には自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その先頭の位置
見つからなかった場合やエラーの場合は負値

strstr()

ssize_t strstr( const char *str ) const;
ssize_t strstr( size_t pos, const char *str ) const;
ssize_t strstr( size_t pos, const char *str, size_t *nextpos ) const;
ssize_t strstr( const tstring &str ) const;
ssize_t strstr( size_t pos, const tstring &str ) const;
ssize_t strstr( size_t pos, const tstring &str, size_t *nextpos ) const;

自身が持つ文字列の左側から文字列 str を検索し, 最初に出現する位置を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. 1文字以上の長さの文字列が見つかった場合は,見つかった位置から さらに str の長さ分だけ右方向に移動させた位置が nextpos の指す変数に返ります. 長さ0の文字列が見つかった場合には,見つかった位置から 1文字分だけ右方向に移動させた位置が自身の文字列長以下であれば, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長+1が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その先頭の位置
見つからなかった場合やエラーの場合は負値

strrchr()

ssize_t strrchr( int ch ) const;
ssize_t strrchr( size_t pos, int ch ) const;
ssize_t strrchr( size_t pos, int ch, size_t *nextpos ) const;

自身が持つ文字列の右側から左方向に文字 ch を検索し, 最初に出現する位置を返します.この位置は文字列の左端からの位置です. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. nextpos の指す変数には, pos が1以上で文字が見つかった場合は見つかった位置の1つ左の位置が, そうでない場合は自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その先頭の位置
見つからなかった場合やエラーの場合は負値

strrstr()

ssize_t strrstr( const char *str ) const;
ssize_t strrstr( size_t pos, const char *str ) const;
ssize_t strrstr( size_t pos, const char *str, size_t *nextpos ) const;
ssize_t strrstr( const tstring &str ) const;
ssize_t strrstr( size_t pos, const tstring &str ) const;
ssize_t strrstr( size_t pos, const tstring &str, size_t *nextpos ) const;

自身が持つ文字列の右側から左方向に文字列 str を検索し, 最初に出現する位置を返します.この位置は文字列の左端からの位置です. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. 1文字以上の長さの文字列が見つかった場合は,見つかった位置から さらに str の長さ分だけ左方向に移動させた位置が nextpos の指す変数に返ります. 長さ0の文字列が見つかった場合には,見つかった位置から 1文字分だけ左方向に移動させた位置が負数でなければ, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長+1が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その先頭の位置
見つからなかった場合やエラーの場合は負値

strpbrk()

ssize_t strpbrk( const char *accept ) const;
ssize_t strpbrk( size_t pos, const char *accept ) const;
ssize_t strpbrk( size_t pos, const char *accept, size_t *nextpos ) const;

自身が持つ文字列の左側から右方向に, 文字セット accept に含まれる文字を検索し, 最初に出現する位置を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 accept には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. nextpos の指す変数には, 文字が見つかった場合は見つかった位置の1つ右の位置が, 見つからなかった場合には自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その文字の位置
見つからなかった場合やエラーの場合は負値

strrpbrk()

ssize_t strrpbrk( const char *accept ) const;
ssize_t strrpbrk( size_t pos, const char *accept ) const;
ssize_t strrpbrk( size_t pos, const char *accept, size_t *nextpos ) const;

自身が持つ文字列の右側から左方向に, 文字セット accept に含まれる文字を検索し, 最初に出現する位置を返します.この位置は文字列の左端からの位置です. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 accept には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. nextpos の指す変数には, pos が1以上で文字が見つかった場合は見つかった位置の1つ左の位置が, そうでない場合は自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
見つかった場合,その文字の位置
見つからなかった場合やエラーの場合は負値

strspn()

size_t strspn( const char *accept ) const;
size_t strspn( size_t pos, const char *accept ) const;
size_t strspn( size_t pos, const char *accept, size_t *nextpos ) const;

自身が持つ文字列の左側から右方向に, 文字セット accept が連続する長さを検索し,その長さを返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 accept には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. このメンバ関数の返り値が1以上の場合は,pos から さらに返り値の分だけ右方向に移動させた位置が nextpos の指す変数に返ります. このメンバ関数の返り値が0の場合には,pos から 1文字分だけ右方向に移動させた位置が自身の文字列長未満であれば, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
文字セット中の文字が連続する長さ

strrspn()

size_t strrspn( const char *accept ) const;
size_t strrspn( size_t pos, const char *accept ) const;
size_t strrspn( size_t pos, const char *accept, size_t *nextpos ) const;

自身が持つ文字列の右側から左方向に, 文字セット accept が連続する長さを検索し,その長さを返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 accept には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. このメンバ関数の返り値が1以上の場合は,pos から さらに返り値の分だけ左方向に移動させた位置が nextpos の指す変数に返ります. このメンバ関数の返り値が0の場合には,pos から 1文字分だけ左方向に移動させた位置が負数でなければ, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

返り値
文字セット中の文字が連続する長さ

strcspn()

size_t strcspn( const char *reject ) const;
size_t strcspn( size_t pos, const char *reject ) const;
size_t strcspn( size_t pos, const char *reject, size_t *nextpos ) const;

自身が持つ文字列の左側から右方向に, 文字セット reject が最初に出現するまでの 文字列の連続する長さを検索し,その長さを返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 reject には,"xyz" のような単純な文字リストに加え, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です.さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

連続して文字や文字列を検索する場合に,nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. このメンバ関数の返り値が1以上の場合は,pos から さらに返り値の分だけ右方向に移動させた位置が nextpos の指す変数に返ります. このメンバ関数の返り値が0の場合には,pos から 1文字分だけ右方向に移動させた位置が自身の文字列長未満であれば, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長が返ります. nextpos による値の取得が不要な場合は, NULLを与える事もできます.

返り値
文字セットに含まれない文字が連続する長さ

strmatch()

int strmatch( const char *pat ) const;
int strmatch( size_t pos, const char *pat ) const;
int strmatch( const tstring &pat ) const;
int strmatch( size_t pos, const tstring &pat ) const;

自身の文字列に対し,pat で指定された シェルのワイルドカードパターンを用いた文字列マッチを試行し, その結果を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

pat で利用可能なワイルドカードは, '*' と '?' および, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です. さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

内部では LIBC の fnmatch() を利用しています.

返り値
マッチした場合は 0
マッチしなかった場合やエラーの場合は負値

fnmatch()

int fnmatch( const char *pat ) const;
int fnmatch( size_t pos, const char *pat ) const;
int fnmatch( const tstring &pat ) const;
int fnmatch( size_t pos, const tstring &pat ) const;

自身の文字列に対し,pat で指定された シェルのワイルドカードパターンを用いた文字列マッチを試行し, その結果を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

fnmatch() では,ファイル名検索をする事を想定しており, 文字列先頭のピリオド '.' を特別に取り扱い, ワイルドカード '*''?' は 文字列先頭ピリオド '.' にマッチさせません.

pat で利用可能なワイルドカードは, '*' と '?' および, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です. さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

内部では LIBC の fnmatch() を利用しています.

返り値
マッチした場合は 0
マッチしなかった場合やエラーの場合は負値

pnmatch()

int pnmatch( const char *pat ) const;
int pnmatch( size_t pos, const char *pat ) const;
int pnmatch( const tstring &pat ) const;
int pnmatch( size_t pos, const tstring &pat ) const;

自身の文字列に対し,pat で指定された シェルのワイルドカードパターンを用いた文字列マッチを試行し, その結果を返します. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

pnmatch() ではパス名検索をする事を想定しており, スラッシュ '/', スラッシュ直後のピリオド '.', 文字列先頭のピリオド '.' を特別に取り扱い, ワイルドカード '*''?' は それらにマッチさせません.

pat で利用可能なワイルドカードは, '*' と '?' および, 正規表現で用いられる "[A-Z]" あるいは "[^A-Z]" のような指定が可能です. さらに,"[…]" の中では, [:alpha:] のような文字クラスが指定できます.

内部では LIBC の fnmatch() を利用しています.

返り値
マッチした場合は 0
マッチしなかった場合やエラーの場合は負値

regmatch()

ssize_t regmatch( const char *pat, size_t *ret_span ) const;              ... 1
ssize_t regmatch( size_t pos, const char *pat, size_t *ret_span ) const;  ... 2
ssize_t regmatch( size_t pos, const char *pat, size_t *ret_span, 
                  size_t *nextpos ) const;                                ... 3
ssize_t regmatch( const tregex &pat, size_t *ret_span ) const;            ... 4
ssize_t regmatch( size_t pos, const tregex &pat, size_t *ret_span ) const; .. 5
ssize_t regmatch( size_t pos, const tregex &pat, size_t *ret_span,
                  size_t *nextpos ) const;                                ... 6

自身の文字列に対し, POSIX拡張正規表現(以下,正規表現)による文字列マッチを試行し, その結果を返します. これらのメンバ関数では,後方参照の情報を得る事ができません. 後方参照の情報を得たい場合は, tarray_tstringクラスの regassign()メンバ関数 を利用してください.

メンバ関数1〜3の場合,正規表現 pat をコンパイルし, その結果を自身が持つ内部バッファに保存し,マッチを行ないます (pat が前回と同じ場合は,再コンパイルしません). 正規表現のコンパイルに失敗すると, 標準エラー出力にその内容を出力します.

メンバ関数4〜6の場合,正規表現のコンパイル結果を保持している tregexクラスのオブジェクトを指定します. したがって,regmatch()メンバ関数を使う前に, あらかじめtregexクラスのcompile()メンバ関数で 正規表現をコンパイルする必要があります.

自身の文字列の位置 pos から 右方向に文字列マッチを試行します. 文字列マッチが試行される対象範囲は, 文字列終端の '\0' が現れるまでです (改行文字 '\n' が現れても処理は終了しません). pos が指定されない場合は,文字列の左端から探します.

マッチした文字列の長さは *ret_span に返ります. マッチした文字列の長さの情報が不要な場合は, ret_span に NULL を指定する事もできます.

連続して文字や文字列を検索する場合に, nextpos を使って, 次の呼び出しで pos に与えるべき値を得る事ができます. pat がマッチし,かつマッチした部分の長さ l が 1 以上の場合は, マッチした位置からさらに l だけ右に移動させた位置が nextpos の指す変数に返ります. マッチした部分の長さが0の場合は,マッチした位置から1文字分 だけ右方向に移動させた位置が自身の文字列長以下であれば, その値が nextpos の指す変数に返ります. それ以外の場合には,自身の文字列長+1が返ります. nextpos による値の取得が不要な場合は,NULLを与える事もできます.

文字パターン pat で利用可能な正規表現の文字列表現方法は 次の表のとおりです.

正規表現の文字列表現 意味
"." 改行以外の任意の一文字
"[…]" リスト("[…]"のこと)に含まれるいずれかの一文字
"[^…]" リストに含まれない,いずれかの一文字
"a|b" "a"または"b"のいずれかに一致
"(ab)" グループ化した"ab"と一致
"\\w" 英数字(文字クラス[[:alnum:]]と同等)
"\\W" 英数字以外([^[:alnum:]]と同等)
"^" パターンの行頭
"$" パターンの行末
"\\<" 単語の先頭の空文字列
"\\>" 単語の末尾の空文字列
"\\b" 単語の端の空文字列
"\\B" 単語の端以外の空文字列
"?" 直前の文字の0回または1回以上の繰り返し
"*" 直前の文字の0回以上の繰り返し
"+" 直前の文字の1回以上の繰り返し
"{n}" 直前の文字のn回の繰り返し
"{n,}" 直前の文字のn回以上の繰り返し
"{n,m}" 直前の文字のn回以上,m回以下の繰り返し
"\\n" 後方参照

リストの中では,[:alpha:] のような文字クラスも指定できます. 文字 "]" をマッチ対象にする場合は, リストの先頭におく必要があります. また,文字 "^" はリスト先頭以外, 文字 "-" はリストの最後にそれぞれおいてください.

後方参照は "\\" の後ろに0でない10進数値文字 n が続くと, 括弧でくくられた部分正規表現の n番目にマッチした文字並びと 同じものにマッチします. 部分正規表現の番号付けは,開き括弧 "(" の位置が左のものから 右のものに向かってなされます. 例えば,文字列 "abc:def::abc:def" は文字パターン "(\\w+):(\\w+)::\\1:\\2" にマッチします.

返り値
マッチした場合,自身の文字列の位置
マッチしなかった場合やエラーの場合は負値

find_quoted()

ssize_t find_quoted( const char *quot_bkt, int escape,
                     size_t *quoted_span = NULL, size_t *nextpos = NULL ) const;
ssize_t find_quoted( size_t pos, const char *quot_bkt, int escape,
                     size_t *quoted_span = NULL, size_t *nextpos = NULL ) const;

オブジェクトが持つ文字列を左側からパースし, 文字列中にあるそれぞれのクォーテーション・括弧の対応関係を調べ, 検索開始位置からみて最も外側のクォーテーションまたは括弧に囲まれた部分の 情報を取得します. 返り値には見つかった部分の位置, *quoted_span にはその部分の長さ, *nextpos には次回の検索時に pos に与えるべき値が返ります. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 quot_bkt には "[]'" のような クォーテーションまたは括弧のリスト, 引数にはエスケープ文字(例: '\\')を指定します.

括弧として扱う事ができるのは,"[]{}<>()" の4種類です.

返り値
見つかった場合はその部分の位置
見つからない場合やエラーの場合は負値

rfind_quoted()

ssize_t rfind_quoted( const char *quot_bkt, int escape,
                      size_t *quoted_span = NULL, size_t *nextpos = NULL ) const;
ssize_t rfind_quoted( size_t pos, const char *quot_bkt, int escape,
                      size_t *quoted_span = NULL, size_t *nextpos = NULL ) const;

オブジェクトが持つ文字列を右側からパースし, 文字列中にあるそれぞれのクォーテーション・括弧の対応関係を調べ, 検索開始位置からみて最も外側のクォーテーションまたは括弧に囲まれた部分の 情報を取得します. 返り値には見つかった部分の位置, *quoted_span にはその部分の長さ, *nextpos には次回の検索時に pos に与えるべき値が返ります. 自身が持つ文字列の途中から検索する場合は,開始位置 pos を指定します.

引数 quot_bkt には "[]'" のような クォーテーションまたは括弧のリスト, 引数にはエスケープ文字(例: '\\')を指定します.

括弧として扱う事ができるのは,"[]{}<>()" の4種類です.

返り値
見つかった場合はその部分の位置
見つからない場合やエラーの場合は負値