鱼C论坛

 找回密码
 立即注册
查看: 1819|回复: 8

C++primer332页书是不是写错了

[复制链接]
发表于 2013-11-21 15:37:53 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 龙羽 于 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++就对了,不要怀疑,不要忘了结帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-21 15:37:54 | 显示全部楼层
if (str1【i】 != str2【i】)
return;               //如果不等于则返回.i没变化,这个例子必然是错的.如果有一个i++就对了,不要怀疑,不要忘了结帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-21 15:48:50 | 显示全部楼层
{:1_1:}买了这书还没收到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-21 15:52:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-21 17:19:27 | 显示全部楼层
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]都一样,那么循环自己结束了,说明是子字符串
可能唯一的遗憾是你没有看到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
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-21 20:41:51 | 显示全部楼层
peterboboo 发表于 2013-11-21 17:19
bool str_subrange(const string &str1, const string &str2)
{
// same sizes: return normal equality  ...

你说的是什么意思 这个循环式怎么实现的 没有i++正确?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-22 08:33:03 | 显示全部楼层
我只能说不严谨吧,或许是作者错了。但是具有编程常识的人,很容易分辨的问题,就不要在纠结了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-22 13:04:39 | 显示全部楼层
回帖是一种美德!~:lol:  楼主加油!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

我爱鱼C论坛 该用户已被删除
发表于 2015-2-19 21:18:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表