C++ 分析字符串以查找匹配项
C++ Parsing string to find occurrence
所以我需要通过以下方式解析用户的输入:如果用户输入
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
,结合rbegin
和rend
* std::string::substr
创建一个子字符串,"/"
可能创建另一个子字符串(取决于std::string::operator!=
),比较两个字符串并销毁临时对象。
请注意,
C:\程序\文件夹\下一个文件夹\文件.txt\
不是文件的路径,而是目录。
如果你的input
是std::string
类型(我认为是),你可以使用string::find
进行正常搜索,string::rfind
进行反向搜索(从头到尾),还可以检查你不需要的最后一个字符,你不应该使用substr
,因为它创建一个新的字符串实例只是为了检查一个字符。你可能只是说if( input.back() == '/' )
如果您使用的是C++字符串,请尝试在字符串上使用反向迭代器,以编写自己的逻辑,了解什么是可接受的,什么是不可接受的。我提供的链接中有一个明显的例子。
根据我的猜测,您正在尝试存储给定路径的目录名称,该路径可能以文件或目录结尾。
如果是这种情况,您最好删除尾随的"\"并检查它是否是一个目录,如果是,则停止,或者如果不是,则继续。
或者,您可以尝试将"\"上的字符串拆分为两部分。这里有一些相关的说明。
如果这些是实际的文件名(看起来您正在使用Windows),那么也请尝试使用_splitpath函数。
- 使用正则表达式regex_search在字符串中查找字符串
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 在 c++ 中查找字符串中没有循环的数字总和
- 查找字符串可以减少到 0 的步骤数
- C++ 查找字符串中存在的元素向量
- 查找字符串中最常见的字母
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 如何使用字符串流查找字符串中的整数总和?
- 穿过链接列表以查找字符串
- 查找字符串中存在的不同字符
- 如何使用 std::find 从向量的第一个元素中查找字符串<字符串对<字符串、字符串> >类型?
- 如何从C++的输入中查找字符串并将其替换为另一个字符串
- C++在多个字符串中查找字符串
- 使用std :: quare_range查找字符串向量中发生的前缀范围
- 在字符串列表中查找字符串,然后将字符串设置为找到的字符串?
- 尝试在类的向量中查找字符串
- 是否有一种算法可以查找字符串中任何指定字符的第一次出现
- 在.txt中查找字符串并获取C++中的行内容
- 如何在考虑标点符号的同时在文件中查找字符串