首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串等价于strrchr

C++字符串等价于strrchr
EN

Stack Overflow用户
提问于 2014-01-21 09:57:12
回答 4查看 4.9K关注 0票数 4

使用C字符串,我将编写以下代码从文件路径获取文件名:

代码语言:javascript
复制
#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>)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-21 10:03:01

最近的等价物是rfind

代码语言:javascript
复制
#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)返回索引,而不是指针。

票数 4
EN

Stack Overflow用户

发布于 2014-01-21 10:09:43

若要查找字符串中符号的最后出现,请使用std::string::rfind

代码语言:javascript
复制
std::string filename = "dir1\\dir2\\filename"; 
std::size_t pos = filename.rfind( "\\" );

但是,如果您更频繁地处理文件名和路径,请查看boost::filesystem

代码语言:javascript
复制
boost::filesystem::path p("dir1\\dir2\\filename");
std::string filename = p.filename().generic_string(); //or maybe p.filename().native();
票数 3
EN

Stack Overflow用户

发布于 2014-01-21 10:02:51

要么调用string::rfind(),要么使用反向迭代器调用std::find (从string::rbegin()string::rend()返回)。

find可能会更高效一些,因为它明确表示您正在寻找匹配的字符。rfind()查找一个子字符串,您将给它一个长度为1的字符串,因此它会找到相同的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21254728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档