C++解析字符串以查找出现

标签 c++ string parsing input substring

所以我需要通过以下方式解析用户的输入: 如果用户输入

C:\Program\Folder\NextFolder\File.txt

C:\Program\Folder\NextFolder\File.txt\

然后我想删除文件并保存

C:\Program\Folder\NextFolder\

我基本上想从末尾开始找到第一次出现的 \ ,如果他们在尾部加上斜线,我就能找到第二次出现的地方。我可以用这段代码决定第一或第二:

input.substr(input.size()-1,1)!="/"

但我不明白如何从末尾开始找到第一个出现的地方。有什么想法吗?

最佳答案

这个

input.substr(input.size()-1,1)!="/"

效率很低*。使用:

if( ! input.empty() && input[ input.length() - 1 ] == '/' )
{
    // something
}

从末尾开始寻找某物的第一次出现与从头开始寻找最后一个“某物”是一样的。您可以使用 find_last_of , 或 rfind或者,您甚至可以使用标准的 find,结合 rbeginrend


*std::string::substr 创建一个子字符串,"/" 可能创建另一个(取决于 std::string::operator!= ), 比较两个字符串并销毁临时对象。


注意

C:\Program\Folder\NextFolder\File.txt\

不是文件路径,而是目录。

关于C++解析字符串以查找出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806615/

相关文章:

C++ std::thread 应该在堆上或堆栈上创建

Java:如何将传入的数据片段收集到正确终止的字符串中以供后续解析?

JavaScript 新函数解析 JSON 字符串

c++ - 为什么 Mozilla 开发人员指南更喜欢 if (ptr) 而不是 if (ptr != nsnull)?

c++ - 获取远程桌面客户端的公共(public) IP 地址

java - 替换字符串中的多个字符串

c# - 在 C# 中替换流中的字符串(不覆盖原始文件)

程序集中的字符串

Java:从 char 解析 int 值

c++ - 推力位移 vector