C++ C++;正在分析字符串以查找匹配项
因此,我需要以以下方式解析用户的输入: 如果用户输入C++ C++;正在分析字符串以查找匹配项,c++,string,parsing,input,substring,C++,String,Parsing,Input,Substring,因此,我需要以以下方式解析用户的输入: 如果用户输入 C:\Program\Folder\NextFolder\File.txt 或 然后我想删除文件并保存 C:\Program\Folder\NextFolder\ 我基本上是想从末尾开始查找第一个出现的\,如果他们在后面加了一个斜杠,那么我就可以找到第二个出现的。我可以用这个代码一次或二次小数: input.substr(input.size()-1,1)!="/" 但我不明白如何从结尾开始找到第一个事件。有什么想法吗?< P>如果你使
C:\Program\Folder\NextFolder\File.txt
或
然后我想删除文件并保存
C:\Program\Folder\NextFolder\
我基本上是想从末尾开始查找第一个出现的\
,如果他们在后面加了一个斜杠,那么我就可以找到第二个出现的。我可以用这个代码一次或二次小数:
input.substr(input.size()-1,1)!="/"
但我不明白如何从结尾开始找到第一个事件。有什么想法吗?< P>如果你使用C++字符串,那么尝试字符串,写你自己的逻辑,在什么是可接受的,哪些不是。在我提供的链接中有一个明显的例子 根据我的猜测,您正在尝试存储给定路径的目录名,该路径可能以文件或目录结尾 如果是这种情况,最好删除尾随的“\”并检查它是否是目录,如果是则停止,如果不是则继续 或者,您可以尝试将“\”上的字符串拆分为两部分。一些相关注释 如果这些是实际的文件名(看起来您正在使用windows),那么也可以尝试该函数 这个
input.substr(input.size()-1,1)!="/"
效率很低*。使用:
if( ! input.empty() && input[ input.length() - 1 ] == '/' )
{
// something
}
从结尾开始寻找某事物的第一次出现与从开头开始寻找最后一个“某物”是一样的。您可以使用,或者甚至可以使用标准
find
,并结合和
*
std::string::substr
创建一个子字符串,“/”
可能会创建另一个子字符串(取决于std::string::operator!=
),比较两个字符串并销毁临时对象
注意
C:\Program\Folder\NextFolder\File.txt\
不是文件的路径,它是一个目录。如果您的
输入类型为std::string
(我认为是这样),您可以使用string::find
进行正常搜索,使用string::rfind
进行反向搜索(从结束到开始)还要检查您不需要的最后一个字符,您不应该使用substr
,因为它会创建一个新的字符串实例来检查一个字符。如果(input.back()='/')
C:\Program\Folder\NextFolder\File.txt\不是文件,这是目录,您可以说!
if( ! input.empty() && input[ input.length() - 1 ] == '/' )
{
// something
}