【发布时间】:2020-11-28 19:20:26
【问题描述】:
我尝试编写一个名为Mystring 的类,它基本上可以完成 std::string 类可以做的所有事情。现在我正在尝试编写一个MyString::rfind 函数,它将一个短字符串与长字符串匹配(就像字符串类的rfind 函数一样)。但是,当我运行代码时,控制台中不会打印任何内容。谁能发现问题出在哪里?
//cpp
size_t MyString::rfind(const MyString& str, size_t pos) const {
if (str.size() == 0 && pos < s.size()) { return pos; }
if (str.size() == 0 && pos > (s.size() - 1) ) { return s.size(); }
size_t a = std::min(pos, (s.size() - 1));
for (size_t i = a; i >= 0; --i) {
if (s[a] == str.s[0]) {
for (size_t b = 1; b < str.size(); ++b) {
if (s[i + b] != str.s[b]) { break; }
if (b == (str.size() - 1)) { return i; }
}
return -1;
}
}
return -1;
}
//main
int main(){
const MyString testMyString = "0123456789";
cout << testMyString.rfind("647")<< endl;
return 0;
}
【问题讨论】:
-
你的类没有任何接受
const char*的构造函数,那么如何编译呢? -
基本上可以做 std::string 类可以做的所有事情。 -- 不,它不能。请注意,
std::string是 std::basic_string 的特化。那么你准备好实现所有这些功能了吗? -
s[i + b]读取到数组末尾 -
如果
pos + str.size() > s.size(),您还可以添加提前退出,这意味着您不需要min调用。