C++ strcmp在C+中的自定义实现+;不起作用
我在挠头。。。为什么strcmp_iter中的return语句从未被调用 当我运行这个函数时,输出只是从0到6计数,然后终止。。。无返回语句。非常令人沮丧。有趣的是,如果我把myString2改为“abcdefG”,那么一切都很好。。。很奇怪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++) {
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++不是服务提供商。