字符串:: substr()返回一个空白字符串

string::substr() returns a blank string

本文关键字:字符串 一个 空白 返回 substr      更新时间:2023-10-16

下一个代码将文件名作为字符串称为字符串,如果文件为bitmap(扩展名.bmp),则应在没有扩展名的情况下返回名称。

InputPicFolder是一个字符串,包含输入文件夹的路径。

path p(InputPicFolder);
for (auto i = directory_iterator(p); i != directory_iterator(); i++)
{
    if (!is_directory(i->path())) //eliminate directories
    {
        string filename = i->path().filename().string();
        //string filename = "APicture.bmp"; 
        int len = filename.length();
        if (len > 4)
        {
            size_t found = filename.find('.');
            string EXT = filename.substr(found + 1);
            if (EXT.compare("bmp") == 0) 
            {
                string filenameWOExtension = filename.substr(0, found);
                cout << filenameWOExtension;
            }
        }
    }
}

但是我得到一个空字符串作为filenameWOExtension

的输出

有人知道我做错了什么?我觉得这是一个非常愚蠢的问题,这是我疲倦的眼睛看不见的。

编辑 - 用升压零件更新代码。似乎没有改变结果。即使我通过" Apicture.bmp"覆盖字符串,我的输出仍然是""

编译器-MSVC14.1

您的代码对我有用:

#include <string>
#include <iostream>
using namespace std;
int main() {
    string filename = "APicture.bmp"; // *** I Changed this
    int len = filename.length();
    if (len > 4)
    {
        size_t found = filename.find('.');
        string EXT = filename.substr(found + 1);
        if (EXT.compare("bmp") == 0)
        {
            string filenameWOExtension = filename.substr(0, found); //should be "APicture"
            cout << filenameWOExtension;
        }
    }
}

我做出的唯一更改是如何获得源字符串。您是否可能没有在您认为自己的字符串中搜索?

如果我的完整程序未产生输出:APicture您应该提供有关编译器和运行时环境的更多信息。这是使用std ::字符串接口编译的,但是它是实际的std ::字符串还是表现像一个的东西?

此外,为什么使用compareAre()而不是普通==比较2个字符串?

相关文章: