0

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

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

或者

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

然后我想删除文件并保存

C:\Program\Folder\NextFolder\

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

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

但我不明白如何从最后开始找到第一次出现。有任何想法吗?

4

3 回答 3

1

这个

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

效率很低*。利用:

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

从头开始寻找第一次出现的东西与从头开始寻找最后一个“某物”是一样的。您可以使用find_last_of, 或rfind或者,您甚至可以使用 standard find,与rbeginand结合使用rend


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


注意

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

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

于 2012-10-09T19:13:23.280 回答
1

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

于 2012-10-09T19:14:30.417 回答
0

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

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

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

或者,您可以尝试将 '\' 上的字符串分成两部分。这里有一些相关的注释

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

于 2012-10-09T19:13:18.120 回答