Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;正在分析字符串以查找匹配项_C++_String_Parsing_Input_Substring - Fatal编程技术网

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
}