C++ strcmp在C+中的自定义实现+;不起作用

C++ strcmp在C+中的自定义实现+;不起作用,c++,for-loop,C++,For Loop,我在挠头。。。为什么strcmp_iter中的return语句从未被调用 当我运行这个函数时,输出只是从0到6计数,然后终止。。。无返回语句。非常令人沮丧。有趣的是,如果我把myString2改为“abcdefG”,那么一切都很好。。。很奇怪 int strcmp_iter(string s1, string s2) { int i = 0; for (; ((s1.at(i) == s2.at(i)) && (i <= s1.length())); i++) {

我在挠头。。。为什么strcmp_iter中的return语句从未被调用

当我运行这个函数时,输出只是从0到6计数,然后终止。。。无返回语句。非常令人沮丧。有趣的是,如果我把myString2改为“abcdefG”,那么一切都很好。。。很奇怪

int strcmp_iter(string s1, string s2) {
  int i = 0;
  for (; ((s1.at(i) == s2.at(i)) && (i <= s1.length())); i++) {
    cout << i << endl;
  }
  return s1.at(i) - s2.at(i);
}


int main() {
  string myString1 = "abcdefg";
  string myString2 = "abcdefg";

  int count_iter = strcmp_iter(myString1, myString2);
  cout << "Iter: " << count_iter << endl;

  return 0;
}
int strcmp\u iter(字符串s1、字符串s2){
int i=0;

对于(;((s1.at(i)==s2.at(i))&&(i您正在循环超出字符串的边界,可能会抛出
std::out_of_range
异常。将您的条件更改为

i < s1.length()
i
在调用
std::string::at(size\u type pos)


另外,请注意,只有当
s2
的长度至少与
s1
的长度相等时,您的函数才能工作。您的循环长度可能小于
std::min(s1.length(),s2.length())

您的循环超出了字符串的边界,可能引发了
std::out_of_range
异常。请将条件更改为

i < s1.length()
i
在调用
std::string::at(size\u type pos)


另外,请注意,只有当
s2
至少与
s1
一样长时,您的函数才能工作。您可能应该将std::min(s1.length(),s2.length())
循环到一个小于std::min(s1.at(i)==s2.at(i))&(s1.at(i)==s2.at(i))&(i每当我看到这个结构时,我都会感到畏缩:

 for (; ((s1.at(i) == s2.at(i)) && (i <= s1.length())); i++)

(;((s1.at(i)==s2.at(i))和&(i每当我看到这个结构时,我都会感到畏缩:

 for (; ((s1.at(i) == s2.at(i)) && (i <= s1.length())); i++)

(;(s1.at(i)=s2.at(i))&(如果你不打算复制它们,我也不会通过字符串)。也使用迭代器。而且喜欢++i到i++。你为什么说< <代码>返回<代码>永远不会被执行?当你用相等的字符串运行时,你得到的异常应该很清楚。不是问题,但是循环终止测试中有太多括号。C++不是如果你不打算复制它们,不要通过字符串传递字符串。也使用迭代器。而且更喜欢++i到i++。你为什么说<代码>返回<代码>从来没有执行?当你用相等的字符串运行时,你得到的异常应该很清楚。不是问题,但是循环终止测试中有太多括号。C++不是服务提供商。