• 検索結果がありません。

int tail = str.find(sep);

N/A
N/A
Protected

Academic year: 2023

シェア "int tail = str.find(sep); "

Copied!
1
0
0

読み込み中.... (全文を見る)

全文

(1)

TA によるユーティリティのすゝめ

先週の課題3はこんな関数を作って解くことができます(※話を簡単にする為にエラーチェックはしてません)。 std::vector<std::string> comma_split(std::string str)

{ std::vector<std::string> result;

int pos = str.find(",");

std::string s1 = str.substr(0, pos);

std::string s2 = str.substr(pos + 1, str.size() - pos - 1);

result.push_back(s1);

result.push_back(s2);

return result; // 実は C の配列と違って vector は値として return できる }

この関数をカンマだけではなく、ユーザが指定した区切り文字列で区切れるようにすると便利そうなので変更 してみましょう

std::vector<std::string> any_split(std::string str, std::string sep) { std::vector<std::string> result;

int pos = str.find(sep);

/* 以下同文 */

return result;

}

更に、文字列を何個にでも区切れるようにしてみましょう。

(例えば "a,b,c" を "," で区切ると "a" と "b" と "c" に区切れるようにします)

std::vector<std::string> split(std::string str, std::string sep) { std::vector<std::string> dst;

int head = 0;

int tail = str.find(sep);

int sp_len = sep.length();

while ( tail != std::string::npos ) {

dst.push_back(str.substr(head, tail - head) );

head = tail + sp_len;

tail = str.find( sep, head );

}

if ( head <= str.length() )

dst.push_back( str.substr(head) );

return dst;

}

これにより、「任意の文字列を任意の区切り文字列で区切ったものを返す関数」ができました。“任意の”とい う抽象的な言葉がよく出てきますね。これだけ抽象的であれば課題以外にも使える気がしませんか?

実際、この関数はCSVファイルから読み込んだデータを要素ごとに取り出す場合や、姓と名を分けるとき等に よく登場しますし、JavaやRubyなどでは標準で組み込まれているほど有名な関数です。

このように、「こうしたらもっと便利になるんじゃね?」と少し想像力を働かせると、ラクができる素敵な便 利ツール作ることができ(る場合があり)ます。そして、この便利ツールをユーティリティといいます。

ユーティリティ作って(あるいは見つけて)しまえば、これ以降で同じような処理をペチペチ書くことも、書 くついでにバグを埋め込んでしまうことも(ほぼ)なくなります。つまり、時間的,精神的にラクができます。

怠け者にとってコレほど素晴らしいことはありません。

皆さんもラクを求めてみませんか?

※これの改良版がhttp://ideone.com/ULEhjにうpしてあります

参照

関連したドキュメント

Kimi ga kureta towa no kizuna wo Omoide ni nante dekiru wakenai Yasashisa wo kimi wa kureta kara Tsuyosa ni kizuketanda arigatou Kanchigai shita kiyou sa hokotte Yasashisa

27 そ の 他 の 操 作 正しい接続例  ループの接続例 接続が輪にならないようにご注意ください

出力例(実行するたびに数値の部分は変わる) サイコロの目は 3 です

[r]

内容を理解しやすいように書く必要があります。読みやすいプログラムを書けるようになるためには、誰か

「 &#34; &lt;0!3 」のように整数型の変数 &lt;0! を宣言すると、図 に示すようにメモリ上に整数 を格納するのに必要な バイトの領域が確保され、そこに変数 &lt;0! の値が格納される

ケーブルをつなぐ前に、必ず電源コードを抜いてください。 ご注意 この接続を行うには[ HDMI 設定]メニュー の[ HDMI

Two Sturmian theorems are established for second order linear nonhomogeneous systems of two differential equations wlth the ule of a mImum principle.. The results also hold