我想比较这一个字符的最后3个字符,并将其与另一个字符进行比较,如果它是真的,则应该进行操作。
const char* find = strrch(filename, '.');
if(find != (char*) ".aac")
{
//do this and this
}
但它不起作用。文件名是一个音频文件,char就像music.aac,我只想在最后3个字符不是aac的时候做点什么。
答案 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)一秒钟的时间: - )