C++ 分析字符串以查找匹配项

C++ Parsing string to find occurrence

本文关键字:查找 字符串 C++      更新时间:2023-10-16

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

C:ProgramFolderNextFolderFile.txt

C:ProgramFolderNextFolderFile.txt

然后我想删除文件并保存

C:ProgramFolderNextFolder

我基本上想找到从末尾开始的的第一次出现,如果他们放了一个尾部斜杠,那么我可以找到第二次出现。我可以用这段代码决定第一个或第二个:

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:\程序\文件夹\

下一个文件夹\文件.txt\

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

如果你的inputstd::string类型(我认为是),你可以使用string::find进行正常搜索,string::rfind进行反向搜索(从头到尾),还可以检查你不需要的最后一个字符,你不应该使用substr,因为它创建一个新的字符串实例只是为了检查一个字符。你可能只是说if( input.back() == '/' )

如果您使用的是C++字符串,请尝试在字符串上使用反向迭代器,以编写自己的逻辑,了解什么是可接受的,什么是不可接受的。我提供的链接中有一个明显的例子。

根据我的猜测,您正在尝试存储给定路径的目录名称,该路径可能以文件或目录结尾。

如果是

这种情况,您最好删除尾随的"\"并检查它是否是一个目录,如果是,则停止,或者如果不是,则继续。

或者,您可以尝试将"\"上的字符串拆分为两部分。这里有一些相关的说明。

如果这些是实际的文件名(看起来您正在使用Windows),那么也请尝试使用_splitpath函数。