0

有没有办法在不使用正则表达式库的情况下知道字符串是否以“goodbye”结尾?

也许使用 strcpy、strlen、ecc。

4

4 回答 4

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");

实际上,现在我把它打出来了,我意识到它并不像我想象的那么麻烦,所以这可能应该比第一个版本更受欢迎。

于 2012-04-18T14:07:05.580 回答
3

是的,这是可能的,它需要两个步骤:

  1. 用于strlen获取长度并查看是否至少为 7。如果不是,则不匹配。
  2. 使用长度检查字符串的最后 7 个字符并使用strcmp.
于 2012-04-18T14:07:42.163 回答
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());
}
于 2012-04-18T14:27:24.447 回答
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";
}
于 2012-04-18T14:13:33.350 回答