C++primer332页书是不是写错了
本帖最后由 龙羽 于 2013-11-21 20:58 编辑bool str_subrange(const string &str1, const string &str2)
{
// same sizes: return normal equality test
if (str1.size() == str2.size())
return str1 == str2; // ok, == returns bool
// find size of smaller string
string::size_type size = (str1.size() < str2.size())
? str1.size() : str2.size();
string::size_type i = 0;
// look at each element up to size of smaller string
while (i != size) {
if (str1【i】 != str2【i】)
return; // error: no return value
}
// error: control might flow off the end of the function without
a return
// the compiler is unlikely to detect this error
}
第二个错误源于函数没有在 while 循环后提供 return 语句。调用这个函数时,如果一个 string 是另一个 string 的子集,执行会退出 while 循环。这里应该有一个 return 语句来处理这种情况。
上面是书里原话,可是实际中这段代码的while循环是怎么都不可能退出的,并不像书中说的一个string是另一个string子集就能退出.....求解?
if (str1【i】 != str2【i】)
return; //如果不等于则返回.i没变化,这个例子必然是错的.如果有一个i++就对了,不要怀疑,不要忘了结帖 {:1_1:}买了这书还没收到 lzy5299487 发表于 2013-11-21 15:48 static/image/common/back.gif
买了这书还没收到
求解啊:mad: bool str_subrange(const string &str1, const string &str2)
{
// same sizes: return normal equality test
if (str1.size() == str2.size())
return str1 == str2; // ok, == returns bool
以上是说如果两个字符串长度相等并且内容相等,那么算子字符串
// find size of smaller string
string::size_type size = (str1.size() < str2.size())
? str1.size() : str2.size();
这里拿到了长度小的字符串的长度
string::size_type i = 0;
// look at each element up to size of smaller string
以下比较两个字符串中的每一个字符是不是一样的,如果有一个不一样,那么返回false
如果找完了str1都一样,那么循环自己结束了,说明是子字符串
可能唯一的遗憾是你没有看到i++吧。
while (i != size) {
if (str1 != str2)
return; // error: no return value
}
// error: control might flow off the end of the function without
a return
// the compiler is unlikely to detect this error
}
peterboboo 发表于 2013-11-21 17:19 static/image/common/back.gif
bool str_subrange(const string &str1, const string &str2)
{
// same sizes: return normal equality...
你说的是什么意思 这个循环式怎么实现的 没有i++正确? 我只能说不严谨吧,或许是作者错了。但是具有编程常识的人,很容易分辨的问题,就不要在纠结了 回帖是一种美德!~:lol:楼主加油!~
页:
[1]