将文件结束与char进行比较

时间:2013-12-04 15:06:19

标签: c++ char compare

我想比较这一个字符的最后3个字符,并将其与另一个字符进行比较,如果它是真的,则应该进行操作。

const char* find = strrch(filename, '.');
if(find != (char*) ".aac")
{
    //do this and this
}

但它不起作用。文件名是一个音频文件,char就像music.aac,我只想在最后3个字符不是aac的时候做点什么。

4 个答案:

答案 0 :(得分:1)

您将.字符的地址与字符串文字的地址进行比较,字符串字面值永远不会相等。您需要使用库来比较字符串值,C ++:

#include <string>

std::string find = ...
if (find != ".aac")

或C:

#include <cstring>

if (std::strcmp(find, ".aac") != 0)

答案 1 :(得分:0)

需要

strcmp()来比较char *std::equal,将char *转换为std::string并使用重载的==,然后编写自己的for循环是其他选项。

答案 2 :(得分:0)

鉴于你试图比较char*指针而不是实际比较字符串,我必须建议你先阅读一本好的C ++书。您可以从The Definitive C++ Book Guide and List

中选择一个

至于比较字符串的最后N个字符,有很多方法可以做到这一点。这里只是一个让你入门:

#include <string>
#include <cctype>
#include <algorithm>
#include <iterator>
#include <iostream> // For example output only.

bool ends_with(
    const std::string& str, const std::string& with,
    bool ignore_case = false
) {
    if (str.length() < with.length())
        return false;
    const auto offset = str.length() - with.length();
    return (
        ignore_case ?
        std::equal(
            std::begin(str) + offset, std::end(str), std::begin(with),
            [](char a, char b){ return ::toupper(a) == ::toupper(b); }
        ) :
        std::equal(std::begin(str) + offset, std::end(str), std::begin(with))
    );
}

int main() {
    std::string filename{"myfile.txt"};
    if (ends_with(filename, ".txt"))
        std::cout << "It is a text file!\n";
    if (ends_with(filename, ".TXT"))
        std::cerr << "Something is wrong :(\n";
    if (ends_with(filename, ".TXT", true))
        std::cout << "Yeah, it is really a text file!\n";
}

这是从here获取的修改版本。我使用GitHub代码搜索在5秒内找到它,并且C ++有数千个结果,因此您可能需要check it out,阅读并尝试理解代码,这将有助于您学习C ++。

希望它有所帮助。祝你好运!

答案 3 :(得分:0)

对于3个剩余的字符,我会通过char快速完成,不需要字符串

const char* find = strrchr(filename, '.');
if(!(find!=0 && *(++find)=='a' && *(++find)=='a' && *(++find)=='c'))
   printf("file %s is not .aac\n", filename);

顺便说一句。你让我离开了尾随r(strrchr)一秒钟的时间: - )