问:C primer plus 5th(chapter13,Review Question 5),该怎么解决
问:C primer plus 5th(chapter13,Review Question 5)
我的函数:
bool has_ch(char ch, const char *line)
{
while(*line++)
if(ch==*line) return true;
return false;
}
答案:
bool has_ch(char ch, const char *line)
{
while(*line)
if(ch==*line++) return true;
return false;
}
上述程序中,只是while循环退出条件在不同位置而已,我发现并没有什么不同。但实际运行时却发现我的程序不能识别出 '# ',从而不打印含有 '# '的行。
请高手解答,谢谢!
------解决方案--------------------
while(*line++)
if(ch==*line) return true;
return false;
==>
bool has_ch(char ch, const char *line)
{
while(*line)
{
line=line+1
if(ch==*line) return true;
}
return false;
}
你把第一个字母给丢掉了
------解决方案--------------------
bool has_ch(char ch, const char *line)
{
while(*line++) // 当*line不为0时,line++使line指向下一个字符了
if(ch==*line) return true;
return false;
}
------解决方案--------------------
注意++
如*line++的意思是先使用 *line
然后把line指针往后移一位
这样你判断的line和你后面操作的line相差一个
标准答案中没有这一问题
------解决方案--------------------
呵呵,就像楼上说的,你把第一个字母给丢了,
两个程序怎么会一样呢?呵呵,答案给的程序对*line 和ch 比较后才移到下一个判断,你没有判断你没有和ch比较就把他移到第二个字符了啊
我的函数:
bool has_ch(char ch, const char *line)
{
while(*line++)
if(ch==*line) return true;
return false;
}
答案:
bool has_ch(char ch, const char *line)
{
while(*line)
if(ch==*line++) return true;
return false;
}
上述程序中,只是while循环退出条件在不同位置而已,我发现并没有什么不同。但实际运行时却发现我的程序不能识别出 '# ',从而不打印含有 '# '的行。
请高手解答,谢谢!
------解决方案--------------------
while(*line++)
if(ch==*line) return true;
return false;
==>
bool has_ch(char ch, const char *line)
{
while(*line)
{
line=line+1
if(ch==*line) return true;
}
return false;
}
你把第一个字母给丢掉了
------解决方案--------------------
bool has_ch(char ch, const char *line)
{
while(*line++) // 当*line不为0时,line++使line指向下一个字符了
if(ch==*line) return true;
return false;
}
------解决方案--------------------
注意++
如*line++的意思是先使用 *line
然后把line指针往后移一位
这样你判断的line和你后面操作的line相差一个
标准答案中没有这一问题
------解决方案--------------------
呵呵,就像楼上说的,你把第一个字母给丢了,
两个程序怎么会一样呢?呵呵,答案给的程序对*line 和ch 比较后才移到下一个判断,你没有判断你没有和ch比较就把他移到第二个字符了啊