有没有办法知道字符串是否以“再见”结尾而不使用正则表达式库?
也许使用strcpy,strlen,ecc。
答案 0 :(得分:5)
str.length() >= 7 && str.substr(str.length() - 7) == "goodbye"
或者您可以使用boost::ends_with,这可能更有效,因为它不会像string::substr
那样分配新的字符串。
我可以像这样使标准库版本更高效:
str.length() >= 7 && std::equal(str.end() - 7, str.end(), "goodbye");
实际上,现在我输入了它,我意识到它并不像我想象的那么繁琐,所以应该首选第一版。
答案 1 :(得分:3)
是的,这是可能的,需要两个步骤:
strlen
获取长度,看看它是否至少为7.如果不是,则不匹配。strcmp
进行比较。答案 2 :(得分:2)
#include <string>
int main(void) {
std::string a="hellogoodbye";
size_t pos = a.rfind("goodbye");
if(pos != string::npos && pos == a.length() - 7) std::cout << "true";
}
答案 3 :(得分:2)
在C:
bool ends_with(char const * string, char const * ending) {
size_t const slen = strlen(string);
size_t const elen = strlen(ending);
return slen >= elen && memcmp(string+slen-elen, ending, elen) == 0;
}
在C ++中:
bool ends_with(std::string const & string, std::string const & ending) {
return string.length() >= ending.length() &&
std::equal(ending.rbegin(), ending.rend(), string.rbegin());
}