使用C字符串,我将编写以下代码从文件路径获取文件名:
#include <string.h>
const char* filePath = "dir1\\dir2\\filename"; // example
// extract file name (including extension)
const char* fileName = strrchr(progPath, '\\');
if (fileName)
++fileName;
else
fileName = filePath;如何对C++字符串执行相同的操作?(即使用来自std::string的#include <string>)
发布于 2014-01-21 10:03:01
最近的等价物是rfind
#include <string>
std::string filePath = "dir1\\dir2\\filename"; // example
// extract file name (including extension)
std::string::size_type filePos = filePath.rfind('\\');
if (filePos != std::string::npos)
++filePos;
else
filePos = 0;
std::string fileName = filePath.substr(filePos);注意,rfind向字符串(或npos)返回索引,而不是指针。
发布于 2014-01-21 10:09:43
若要查找字符串中符号的最后出现,请使用std::string::rfind
std::string filename = "dir1\\dir2\\filename";
std::size_t pos = filename.rfind( "\\" );但是,如果您更频繁地处理文件名和路径,请查看boost::filesystem
boost::filesystem::path p("dir1\\dir2\\filename");
std::string filename = p.filename().generic_string(); //or maybe p.filename().native();发布于 2014-01-21 10:02:51
要么调用string::rfind(),要么使用反向迭代器调用std::find (从string::rbegin()和string::rend()返回)。
find可能会更高效一些,因为它明确表示您正在寻找匹配的字符。rfind()查找一个子字符串,您将给它一个长度为1的字符串,因此它会找到相同的内容。
https://stackoverflow.com/questions/21254728
复制相似问题