C++ 如何检查字符串中的最后一个字符是否为某个字符并将其从字符串中删除?(C+;+;)
我使用此函数返回指定目录是否存在:C++ 如何检查字符串中的最后一个字符是否为某个字符并将其从字符串中删除?(C+;+;),c++,string,C++,String,我使用此函数返回指定目录是否存在: double directory_exists(char *pathname) { struct stat sb; return (stat(pathname,&sb) == 0 && S_ISDIR(sb.st_mode)); } 但是,如果用户键入的最后一个字符是斜杠(Windows上为“\”,Mac/Linux上为“/”),我希望从路径名中删除该字符,并将该值存储在新变量中,并在stat(
double directory_exists(char *pathname)
{
struct stat sb;
return (stat(pathname,&sb) == 0 &&
S_ISDIR(sb.st_mode));
}
但是,如果用户键入的最后一个字符是斜杠(Windows上为“\”,Mac/Linux上为“/”),我希望从路径名中删除该字符,并将该值存储在新变量中,并在stat()中使用该变量,而不是在pathname中使用该变量
stat()会认为,如果在路径的末尾恰好有一个斜杠,那么该路径就不存在。由于有些人(不是所有人)确实认为在路径名的末尾放一个斜杠,因此我想通过检测他们是否在路径的末尾使用了斜杠,然后将其删除
我正在寻找适用于Windows/Mac/Linux的便携式解决方案
谢谢 我找到了解决办法。我想我应该在这里询问之前多找些
double directory_exists(char *pathname)
{
std::string str(pathname);
if (!str.empty())
{
while (*str.rbegin() == '\\' || *str.rbegin() == '/')
{
str.erase(str.size()-1);
}
}
struct stat sb;
return (stat((char *)str.c_str(),&sb) == 0 &&
S_ISDIR(sb.st_mode));
}
这种方法的优点在于它不需要C++11,这与string::back()和string::pop_back()不同。您认为不需要在这里询问就可以实现这一点是正确的,但是现在请接受你自己对这个问题的回答,这样问题就很明显了solved@slawekwin我本来打算去的,但上面说我得等两天。我有能力的时候会做的。:)您不应该使用文本字符串的地址。只需做一个字符比较:
*str.rbegin()='\\'\\'\\\\.*str.rbegin()=='/'
@DarioP谢谢你的提示!:)