ロコリンの雑記

アニメ大好きニートのロコリンのブログ。2015年卒(修士)の社会人。学生時代(2010年)から続けてるブログなのでエントリによっては学生ブログと社会人ブログになっています。時系列から察して。
 
 
このブログについて
ブログ内検索
カテゴリ
プロフィール

ロコリン

Author:ロコリン
2018年5月だけニート(6月から会社員)。2015年3月まで大学院生でした。
趣味:アニメ/Twitter/ゲーム/ニコ動
今(2015年2月更新):プリキュア/プリパラ/アイカツ/ごちうさ/艦これ

外部リンク
Twitter

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C++][STL] パス名からディレクトリ名とファイル名を抽出 

1 パス

ディレクトリ名の末尾に / または \ が付くと仮定。

1.1 ディレクトリ

std::string path2dir(const std::string &path) {
	const std::string::size_type pos = std::max<signed>(path.find_last_of('/'), path.find_last_of('\\'));
	return (pos == std::string::npos) ? std::string()
		: path.substr(0, pos + 1);
}

1.2 ファイル

std::string path2file(const std::string &path) {
	return path.substr(std::max<signed>(path.find_last_of('/'), path.find_last_of('\\')) + 1);
}

1.3 サンプル

path2dirfile.cpp

#include <string>
#include <algorithm>
#include <iostream>

std::string path2dir(const std::string &path) {
	const std::string::size_type pos = std::max<signed>(path.find_last_of('/'), path.find_last_of('\\'));
	return (pos == std::string::npos) ? std::string()
		: path.substr(0, pos + 1);
}

std::string path2file(const std::string &path) {
	return path.substr(std::max<signed>(path.find_last_of('/'), path.find_last_of('\\')) + 1);
}

void view(const std::string &path) {
	std::cout << path << " => " << "(" << path2dir(path) << " , " << path2file(path) << ")" << std::endl;
}

int main() {
	view("./anime/daisuki/dayo");
	view("anime");
	view("daisuki/");
	view("/etc");
	view("");
	view("./anime\\daisuki/dayo");
	view("./anime/daisuki\\dayo");
	return 0;
}

結果

./anime/daisuki/dayo => (./anime/daisuki/ , dayo)
anime => ( , anime)
daisuki/ => (daisuki/ , )
/etc => (/ , etc)
 => ( , )
./anime\daisuki/dayo => (./anime\daisuki/ , dayo)
./anime/daisuki\dayo => (./anime/daisuki\ , dayo)

参考文献

  1. C++のメモ - メモのメモ
スポンサーサイト
コメント















 管理者にだけ表示を許可する

トラックバック
 
http://rexpit.blog29.fc2.com/tb.php/84-a5e0bee2
最新記事
最新コメント
FC2カウンタ
欲しい
最近買ったもの
Amazon 検索
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。