使用find_last_of搜索文件名

时间:2016-05-24 10:32:35

标签: c++ string

我在c ++中有一个文件名列表,作为字符串。我将它们存储在矢量中。

vector<string> files;

使用.find_last_of,我获得了扩展程序。

for (int j = 0; j < files.size(); j++)
    {
        if (files[j].substr(files[j].find_last_of(".") + 1) == "tif") {
            images.push_back(files[j]);

        }

一切正常。现在,我需要检查文件名的最后一部分,在extension.eg之前,在文件中:

FileName.1001.tif

我希望得到'1001'

我试过了:

if (files[i].substr(files[i].find_last_of(".") - 1) == "1001")
            {
                std::cout << "yaaay..." << std::endl;
            }

但它永远不会受到打击。我可以不在这里使用' - 1'吗?或者我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以尝试这样:

if(files[i].substr (str.find("."),str.find_last_of(".")-str.find("."))== "1001")

IDEONE DEMO

答案 1 :(得分:1)

坚持使用您当前的方法,您只需要删除扩展名,然后应用相同的“查找最后一个”。逻辑:

std::string getLastPart(const std::string &filename)
{
    // Strip of the extension
    auto name = filename.substr(0, filename.find_last_of('.'));

    // Now get everything to the right of the last .
    auto part = name.substr(name.find_last_of('.') + 1);

    return part;
}

注意:如果.不存在,您需要添加一些错误处理...

现在你可以说:

if(getLastPart(files[i]) == "1001")
{
  std::cout << "yaaay..." << std::endl;
}