如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除? (C ++)

时间:2017-08-24 04:07:58

标签: c++ string

我有这个函数来返回指定的目录是否存在:

double directory_exists(char *pathname)
{
    struct stat sb;
    return (stat(pathname,&sb) == 0 &&
            S_ISDIR(sb.st_mode));
}

但是,如果用户输入的最后一个字符是斜杠(" \"在Windows上或" /"在Mac / Linux上)我想删除路径名中的那个字符,并将该值存储在一个新变量中,并在stat()中使用该变量而不是路径名。

stat()会认为这条路径并不存在,如果最后恰好是一个斜线,并且因为有些人(不是每个人)都认为在他们的结尾处放一个斜线pathname,我想通过检测它们是否在末尾使用斜线然后将其删除来迎合它。

我正在寻找适用于Windows / Mac / Linux的便携式解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我想在问这里之前我应该​​多搜索一下。

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()不同。