nlib
nn::nlib::StringView クラス

std::stringが持つメソッドをstd::stringを構築せずに利用するためのクラスです。 [詳解]

#include "nn/nlib/StringView.h"

公開型

typedef char charT
 現在はchar型専用のクラスです。
 
typedef charT value_type
 文字の型です。
 
typedef const charTpointer
 文字へのポインタ型ですが、const_pointerと同一です。
 
typedef const charTconst_pointer
 文字へのポインタ型です。
 
typedef const charTreference
 文字への参照ですが、const_referenceと同一です。
 
typedef const charTconst_reference
 文字への参照です。
 
typedef const_pointer const_iterator
 文字列のイテレータです。
 
typedef const_iterator iterator
 文字列のイテレータですが、const_iteratorと同一です。
 
typedef std::reverse_iterator< const_iteratorconst_reverse_iterator
 文字列の逆方向イテレータです
 
typedef const_reverse_iterator reverse_iterator
 文字列の逆方向イテレータですが、const_reverse_iteratorと同一です。
 
typedef size_t size_type
 非負整数型で、現在はsize_ttypedefされています。
 
typedef ptrdiff_t difference_type
 イテレータの差分をとったときに返される型です。
 

公開メンバ関数

constexpr StringView () noexcept
 デフォルトコンストラクタです。空文字列で初期化されます。
 
 StringView (const charT *str) noexcept
 str を参照するように初期化されます。内部で文字列長が計算されます。
 
 StringView (const charT *str, size_type len) noexcept
 (計算済みの)文字列長を与えて初期化します。
 
const_iterator begin () const noexcept
 最初のキャラクタへの反復子を返します。 [詳解]
 
const_iterator end () const noexcept
 最後の文字に続く文字への反復子を返します。 [詳解]
 
const_iterator cbegin () const noexcept
 最初のキャラクタへの反復子を返します。 [詳解]
 
const_iterator cend () const noexcept
 最後の文字に続く文字への反復子を返します。 [詳解]
 
const_reverse_iterator rbegin () const noexcept
 最後の文字への逆反復子を返します。 [詳解]
 
const_reverse_iterator rend () const noexcept
 最初の文字の前の文字への逆反復子を返します。 [詳解]
 
const_reverse_iterator crbegin () const noexcept
 最後の文字への逆反復子を返します。 [詳解]
 
const_reverse_iterator crend () const noexcept
 最初の文字の前の文字への逆反復子を返します。 [詳解]
 
size_type size () const noexcept
 文字列長を返します。 [詳解]
 
size_type length () const noexcept
 文字列長を返します。 [詳解]
 
size_type max_size () const noexcept
 文字列長の最大値を返します。 [詳解]
 
bool empty () const noexcept
 空文字列であるかどうかをチェックします。 [詳解]
 
const charToperator[] (size_type pos) const
 pos 番目の文字を取得します。 [詳解]
 
const charTat (size_type pos) const
 pos 番目の文字を取得します。 [詳解]
 
const charTfront () const
 最初の文字を取得します。 [詳解]
 
const charTback () const
 最後の文字を取得します。 [詳解]
 
const charTdata () const noexcept
 最初の文字へのポインタを返します。 [詳解]
 
void clear () noexcept
 空文字列を設定します。
 
void remove_prefix (size_type n) noexcept
 最初のn 文字を取り除きます。 [詳解]
 
void remove_suffix (size_type n) noexcept
 最後のn 文字を取り除きます。 [詳解]
 
StringView substr (size_type pos, size_type n=npos) const noexcept
 部分文字列[pos, pos + n)を返します。 [詳解]
 
int compare (const StringView &s) const noexcept
 文字列を比較します。 [詳解]
 
int compare (const charT *s) const noexcept
 文字列を比較します。 [詳解]
 
bool starts_with (const StringView &s) const noexcept
 文字列がs をプレフィックスとして持つかをチェックします。 [詳解]
 
bool starts_with (charT c) const noexcept
 文字c で始まるかどうかをチェックします。 [詳解]
 
bool starts_with (const charT *s) const noexcept
 文字列がs をプレフィックスとして持つかをチェックします。 [詳解]
 
bool ends_with (const StringView &s) const noexcept
 文字列がs をサフィックスとして持つかをチェックします。 [詳解]
 
bool ends_with (charT c) const noexcept
 末尾が文字c であるかどうかをチェックします。 [詳解]
 
bool ends_with (const charT *s) const noexcept
 文字列がs をサフィックスとして持つかをチェックします。 [詳解]
 
bool ToCstring (charT *str, size_type buf_size) const noexcept
 C文字列に変換します。 [詳解]
 
template<size_type N>
bool ToCstring (charT(&str)[N]) const noexcept
 
bool ToCstring (UniquePtr< charT[]> &str) const noexcept
 
errno_t ToInteger (int32_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (int64_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (uint32_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (uint64_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (int8_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (int16_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (uint8_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToInteger (uint16_t *v, size_type *idx=NULL, int base=10) const noexcept
 文字列を整数に変換します。 [詳解]
 
errno_t ToFloat (float *v, size_type *idx=NULL) const noexcept
 文字列を倍精度浮動小数点数に変換します。 [詳解]
 
errno_t ToDouble (double *v, size_type *idx=NULL) const noexcept
 文字列を倍精度浮動小数点数に変換します。 [詳解]
 
bool TrimLeft () noexcept
 文字列の先頭の空白を切り詰めます。 [詳解]
 
bool TrimRight () noexcept
 文字列の末尾の空白を切り詰めます。 [詳解]
 
void Trim () noexcept
 文字列の先頭と末尾の空白を切り詰めます。
 
StringView GetLine () noexcept
 先頭から行末までの文字列を取得します。 [詳解]
 
bool Proceed (const StringView &kwd) noexcept
 プレフィックスがkwd と一致していればkwd の文字列長だけ前に進みます。 [詳解]
 
bool Proceed (const charT *kwd) noexcept
 プレフィックスがkwd と一致していればkwd の文字列長だけ前に進みます。 [詳解]
 
bool Proceed (charT ch) noexcept
 先頭の文字をチェックして一致していれば1文字前に進みます。 [詳解]
 
StringView GetName () noexcept
 一般に変数名とされるような文字列を取得します。 [詳解]
 

静的公開変数類

static const size_type npos = size_type(-1)
 std::stringnposと同様に用います。
 

詳解

std::stringが持つメソッドをstd::stringを構築せずに利用するためのクラスです。

説明
C++1yに提案されている、string_viewクラスを参考に実装されています。
以下のようなコードを書くことで利用することができます。
// C文字列からの初期化
const char str[] = .......;
StringView view(str);
// C++文字列からの初期化
string str = ....;
StringView view(&str[0], str.len());
// 部分文字列の取得
StringView substr = view.substr(1, 10);
// 左右の空白の削除
view.TrimLeft();
view.TrimRight();
view.Trim();
// プレフィックス, サフィックスのチェック
view.starts_with(char);
view.starts_with(C string);
view.starts_with(StringView);
view.ends_with(char);
view.ends_with(C string);
view.ends_with(StringView);
// C文字列へのコピー
view.ToCstring(buf, bufsize);
// 数値文字列のパース
view.ToInteger(&v);
view.ToFloat(&f);
view.ToDouble(&d);
....
参照
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3609.html
各種例:
misc/stringutils/stringutils.cpp.

StringView.h15 行目に定義があります。

関数詳解

§ at()

nn::nlib::StringView::at ( size_type  pos) const
inline

pos 番目の文字を取得します。

引数
[in]pos文字へのインデックス
戻り値
pos 番目の文字

StringView.h73 行目に定義があります。

§ back()

nn::nlib::StringView::back ( ) const
inline

最後の文字を取得します。

戻り値
最後の文字

StringView.h78 行目に定義があります。

§ begin()

nn::nlib::StringView::begin ( ) const
inlinenoexcept

最初のキャラクタへの反復子を返します。

戻り値
最初のキャラクタへの反復子

StringView.h43 行目に定義があります。

§ cbegin()

nn::nlib::StringView::cbegin ( ) const
inlinenoexcept

最初のキャラクタへの反復子を返します。

戻り値
最初のキャラクタへの反復子

StringView.h48 行目に定義があります。

§ cend()

nn::nlib::StringView::cend ( ) const
inlinenoexcept

最後の文字に続く文字への反復子を返します。

戻り値
最後の文字に続く文字への反復子

StringView.h49 行目に定義があります。

§ compare() [1/2]

nn::nlib::StringView::compare ( const StringView s) const
noexcept

文字列を比較します。

引数
[in]s比較対象の文字列
戻り値
std::strcmp()と同様の値

§ compare() [2/2]

nn::nlib::StringView::compare ( const charT s) const
inlinenoexcept

文字列を比較します。

引数
[in]s比較対象の文字列
戻り値
std::strcmp()と同様の値

StringView.h113 行目に定義があります。

§ crbegin()

nn::nlib::StringView::crbegin ( ) const
inlinenoexcept

最後の文字への逆反復子を返します。

戻り値
最後の文字への逆反復子

StringView.h53 行目に定義があります。

§ crend()

nn::nlib::StringView::crend ( ) const
inlinenoexcept

最初の文字の前の文字への逆反復子を返します。

戻り値
最初の文字の前の文字への逆反復子

StringView.h54 行目に定義があります。

§ data()

nn::nlib::StringView::data ( ) const
inlinenoexcept

最初の文字へのポインタを返します。

戻り値
最初の文字へのポインタ

StringView.h79 行目に定義があります。

§ empty()

nn::nlib::StringView::empty ( ) const
inlinenoexcept

空文字列であるかどうかをチェックします。

戻り値
空文字列であればtrue

StringView.h66 行目に定義があります。

§ end()

nn::nlib::StringView::end ( ) const
inlinenoexcept

最後の文字に続く文字への反復子を返します。

戻り値
最後の文字に続く文字への反復子

StringView.h47 行目に定義があります。

§ ends_with() [1/3]

nn::nlib::StringView::ends_with ( const StringView s) const
inlinenoexcept

文字列がs をサフィックスとして持つかをチェックします。

引数
[in]sサフィックス文字列
戻り値
s をサフィックスとして持てばtrue

StringView.h123 行目に定義があります。

§ ends_with() [2/3]

nn::nlib::StringView::ends_with ( charT  c) const
inlinenoexcept

末尾が文字c であるかどうかをチェックします。

引数
[in]c文字
戻り値
末尾が文字c であればtrue

StringView.h129 行目に定義があります。

§ ends_with() [3/3]

nn::nlib::StringView::ends_with ( const charT s) const
inlinenoexcept

文字列がs をサフィックスとして持つかをチェックします。

引数
[in]sサフィックス文字列
戻り値
s をサフィックスとして持てばtrue

StringView.h130 行目に定義があります。

§ front()

nn::nlib::StringView::front ( ) const
inline

最初の文字を取得します。

戻り値
最初の文字

StringView.h77 行目に定義があります。

§ GetLine()

nn::nlib::StringView::GetLine ( )
noexcept

先頭から行末までの文字列を取得します。

戻り値
1行分の部分文字列(改行文字は含まない)
説明
自身のオブジェクトは次の行の行頭に移動します。

§ GetName()

StringView nn::nlib::StringView::GetName ( )
inlinenoexcept

一般に変数名とされるような文字列を取得します。

戻り値
マッチした文字列
説明
正規表現[a-zA-Z_][a-zA-Z0-9_]*にマッチする先頭の部分文字列を返します。 自身のオブジェクトは取得した文字列の次に移動します。

StringView.h270 行目に定義があります。

§ length()

nn::nlib::StringView::length ( ) const
inlinenoexcept

文字列長を返します。

戻り値
文字列長

StringView.h61 行目に定義があります。

§ max_size()

nn::nlib::StringView::max_size ( ) const
inlinenoexcept

文字列長の最大値を返します。

戻り値
文字列長の最大値

StringView.h65 行目に定義があります。

§ operator[]()

nn::nlib::StringView::operator[] ( size_type  pos) const
inline

pos 番目の文字を取得します。

引数
[in]pos文字へのインデックス
戻り値
pos 番目の文字

StringView.h69 行目に定義があります。

§ Proceed() [1/3]

nn::nlib::StringView::Proceed ( const StringView kwd)
inlinenoexcept

プレフィックスがkwd と一致していればkwd の文字列長だけ前に進みます。

引数
[in]kwdチェックする文字列
戻り値
プレフィックスがkwd と一致していればtrue

StringView.h165 行目に定義があります。

§ Proceed() [2/3]

nn::nlib::StringView::Proceed ( const charT kwd)
inlinenoexcept

プレフィックスがkwd と一致していればkwd の文字列長だけ前に進みます。

引数
[in]kwdチェックする文字列
戻り値
プレフィックスがkwd と一致していればtrue

StringView.h171 行目に定義があります。

§ Proceed() [3/3]

bool nn::nlib::StringView::Proceed ( charT  ch)
inlinenoexcept

先頭の文字をチェックして一致していれば1文字前に進みます。

引数
[in]chチェックする文字
戻り値
先頭の文字がch であればtrue

StringView.h260 行目に定義があります。

§ rbegin()

nn::nlib::StringView::rbegin ( ) const
inlinenoexcept

最後の文字への逆反復子を返します。

戻り値
最後の文字への逆反復子

StringView.h51 行目に定義があります。

§ remove_prefix()

nn::nlib::StringView::remove_prefix ( size_type  n)
inlinenoexcept

最初のn 文字を取り除きます。

引数
[in]n除去する文字数
説明
効果は以下のコードと一緒です。
*this = this->substr(n, npos);

StringView.h86 行目に定義があります。

§ remove_suffix()

nn::nlib::StringView::remove_suffix ( size_type  n)
inlinenoexcept

最後のn 文字を取り除きます。

引数
[in]n除去する文字数
説明
効果は以下のコードと一緒です。
*this = this->substr(0, this->size() - n);

StringView.h95 行目に定義があります。

§ rend()

nn::nlib::StringView::rend ( ) const
inlinenoexcept

最初の文字の前の文字への逆反復子を返します。

戻り値
最初の文字の前の文字への逆反復子

StringView.h52 行目に定義があります。

§ size()

nn::nlib::StringView::size ( ) const
inlinenoexcept

文字列長を返します。

戻り値
文字列長

StringView.h57 行目に定義があります。

§ starts_with() [1/3]

nn::nlib::StringView::starts_with ( const StringView s) const
inlinenoexcept

文字列がs をプレフィックスとして持つかをチェックします。

引数
[in]sプレフィックス文字列
戻り値
s をプレフィックスとして持てばtrue

StringView.h114 行目に定義があります。

§ starts_with() [2/3]

nn::nlib::StringView::starts_with ( charT  c) const
inlinenoexcept

文字c で始まるかどうかをチェックします。

引数
[in]c文字
戻り値
c で始まっていればtrue

StringView.h119 行目に定義があります。

§ starts_with() [3/3]

nn::nlib::StringView::starts_with ( const charT s) const
inlinenoexcept

文字列がs をプレフィックスとして持つかをチェックします。

引数
[in]sプレフィックス文字列
戻り値
s をプレフィックスとして持てばtrue

StringView.h120 行目に定義があります。

§ substr()

nn::nlib::StringView::substr ( size_type  pos,
size_type  n = npos 
) const
inlinenoexcept

部分文字列[pos, pos + n)を返します。

引数
[in]pos部分文字列の最初の位置
[in]n部分文字列の長さ
戻り値
部分文字列[pos, pos + n)、を表すStringViewオブジェクト

StringView.h104 行目に定義があります。

§ ToCstring() [1/3]

nn::nlib::StringView::ToCstring ( charT str,
size_type  buf_size 
) const
noexcept

C文字列に変換します。

引数
[out]strC文字列を格納するバッファ
[in]buf_sizeバッファ・サイズ(NULL文字を含む)
戻り値
成功した場合はtrue、バッファ・サイズが足りない場合はfalse

§ ToCstring() [2/3]

template<size_type N>
nn::nlib::StringView::ToCstring ( charT(&)  str[N]) const
inlinenoexcept
テンプレート引数
Nバッファ・サイズ(NULL文字を含む)
引数
[in]strC文字列を格納するバッファ
戻り値
成功した場合はtrue、バッファ・サイズが足りない場合はfalse

StringView.h133 行目に定義があります。

§ ToCstring() [3/3]

nn::nlib::StringView::ToCstring ( UniquePtr< charT[]> &  str) const
inlinenoexcept
引数
[out]strC文字列を格納するUniquePtrの参照
戻り値
成功した場合はtrue、メモリの動的確保に失敗した場合はfalse

StringView.h139 行目に定義があります。

§ ToDouble()

nn::nlib::StringView::ToDouble ( double *  v,
size_type idx = NULL 
) const
noexcept

文字列を倍精度浮動小数点数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
説明
ERANGEの場合は、idx に読み込んだ文字数が格納されます。 それ以外のエラーの場合は格納されません。

§ ToFloat()

nn::nlib::StringView::ToFloat ( float *  v,
size_type idx = NULL 
) const
noexcept

文字列を倍精度浮動小数点数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
説明
ERANGEの場合は、idx に読み込んだ文字数が格納されます。 それ以外のエラーの場合は格納されません。

§ ToInteger() [1/8]

nn::nlib::StringView::ToInteger ( int32_t *  v,
size_type idx = NULL,
int  base = 10 
) const
noexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

§ ToInteger() [2/8]

nn::nlib::StringView::ToInteger ( int64_t *  v,
size_type idx = NULL,
int  base = 10 
) const
noexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

§ ToInteger() [3/8]

nn::nlib::StringView::ToInteger ( uint32_t *  v,
size_type idx = NULL,
int  base = 10 
) const
noexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

§ ToInteger() [4/8]

nn::nlib::StringView::ToInteger ( uint64_t *  v,
size_type idx = NULL,
int  base = 10 
) const
noexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

§ ToInteger() [5/8]

errno_t nn::nlib::StringView::ToInteger ( int8_t *  v,
size_type idx = NULL,
int  base = 10 
) const
inlinenoexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

StringView.h221 行目に定義があります。

§ ToInteger() [6/8]

errno_t nn::nlib::StringView::ToInteger ( int16_t *  v,
size_type idx = NULL,
int  base = 10 
) const
inlinenoexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

StringView.h231 行目に定義があります。

§ ToInteger() [7/8]

errno_t nn::nlib::StringView::ToInteger ( uint8_t *  v,
size_type idx = NULL,
int  base = 10 
) const
inlinenoexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

StringView.h241 行目に定義があります。

§ ToInteger() [8/8]

errno_t nn::nlib::StringView::ToInteger ( uint16_t *  v,
size_type idx = NULL,
int  base = 10 
) const
inlinenoexcept

文字列を整数に変換します。

引数
[out]v数値が格納されるへのポインタ
[out]idx読み込んだ文字数が格納されるポインタ
[in]base基数。0, 8, 10, 16が指定可能。0の場合の挙動はstd::strtol関数と同様
戻り値
0成功した場合
ELISEQ数値の途中で不正な文字を検出した場合
EINVALvNULLである場合
ERANGEオーバーフロー又はアンダーフローが発生した場合
ENOTSUPbase が0, 8, 10, 16以外の場合

StringView.h251 行目に定義があります。

§ TrimLeft()

nn::nlib::StringView::TrimLeft ( )
noexcept

文字列の先頭の空白を切り詰めます。

戻り値
空白が切り詰められた場合はtrue

§ TrimRight()

nn::nlib::StringView::TrimRight ( )
noexcept

文字列の末尾の空白を切り詰めます。

戻り値
空白が切り詰められた場合はtrue

このクラス詳解は次のファイルから抽出されました: