如何检查字符串是否以 .txt 结尾

27

我正在学习基础C++,现在我从用户那里获得了一个字符串,并且我想检查他们是否输入了整个文件名(包括.txt)。我有这个字符串,但我该如何检查它是否以“.txt”结尾?

string fileName;

cout << "Enter filename: \n";
cin >> fileName;

string txt = fileName.Right(4);

Right(int)方法只适用于CString,因此上面的代码不起作用。我希望如果可能的话,能够使用普通字符串。有什么想法吗?


1
我猜你的问题更多地涉及到文件名而不是字符串,所以我建议你寻找能够以可移植的方式提取文件名扩展名的解决方案。许多库都提供了这方面的支持。 - Frédéric Hamidi
1
可能是重复的问题:在C++中查找字符串是否以另一个字符串结尾 - Victor Sergienko
12个回答

1
这应该可以做到。
bool ends_with(const std::string & s, const std::string & suffix) {
     return s.rfind(suffix) == s.length() - suffix.length();
}

在这里验证


0
这里是“完全自编写”的解决方案:
bool isEndsWith(const std::string& pstr, const std::string& substr) const
{
    int tlen = pstr.length();
    int slen = substr.length();

    if(slen > tlen)
        return false;

    const char* tdta = pstr.c_str();
    const char* sdta = substr.c_str();

    while(slen)
    {
        if(tdta[tlen] != sdta[slen])
            return false;

        --slen; --tlen;
    }
    return true;
}

+1,但为什么要使用指针而不是只在测试中使用 pstr[--tlen] != substr[--slen] - 6502
1
@6502 嗯,我认为Dietrich的解决方案很好,但是当我还在第一门课程上写这个时,我仍然在我的引擎中使用它至今。 - Netherwire
每个人都有一些年轻时写的糟糕代码。但是,为什么要坚持使用它呢(除非你被迫这样做)? - 6502
@6502,我认为我的解决方案现在还不错,没有必要进行优化 :) - Netherwire
传播不良编程风格:1 - length() 是无符号的。2 - 获取 const char * 是完全不必要的。 - Slava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接