作者max80713 ()
看板Programming
标题Re: [问题] 回圈改递回请益
时间Sat Sep 29 11:41:05 2018
※ 引述《RicciYeh (RicciYeh)》之铭言:
: 小弟第一次发文,若有违反版规的,请鞭小力点,谢谢。
: 小弟的题目,是寻找一个字串中,某个字母的出现次数
: 回圈版本相当简单,我还应付得来,程式码如下:
: int countI(string s, char c)
: {
: int length = s.size(), cnt = 0;
: for (int i = 0; i < length; i++)
: if (s[i] == c)
: cnt++;
: return cnt;
: }
: 但递回的版本,我真的是一点头绪也没有
: int countR(string s, char c)
: {
: int length = s.size();
: if(s[length] == c)
: return 1 + countR(s, c);
: }
: 我原本是这样写,可是有一个很大的问题是 length 的值都一样阿
: 每函式重进去一次,就会重新呼叫 length = s.size();
: 请求各位大神给点方向,感恩。
int countR(string s, char c, ing i = 0)
{
int length = s.size();
if(i == length)
return 0;
if(s[i] == c)
return 1 + countR(s, c, i+1);
else
return countR(s, c, i+1);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.166.40.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1538192467.A.188.html
1F:推 RicciYeh: 那如果不用int i 的话有办法吗?223.140.111.163 09/29 16:04
2F:→ RicciYeh: 不在函数後面增加变数223.140.111.163 09/29 16:04
3F:→ RicciYeh: 主要是这点我想不太出来223.140.111.163 09/29 16:04
4F:推 LPH66: 那就想办法把现在的位置传进去 123.195.192.32 09/29 18:58
5F:→ LPH66: 其中一个方法是切字串 123.195.192.32 09/29 18:58
6F:→ b0920075: c_str用ptr应该可以不用传idx,但是cpp 42.75.53.192 10/03 11:44
7F:→ b0920075: 的string我就不确定了 42.75.53.192 10/03 11:44
8F:→ bbbing: string是call by value吧?每 次都缩短它 112.104.14.163 10/11 10:51
9F:→ bbbing: 递回的部分改成substring(1,s.length()) 112.104.14.163 10/11 10:52
10F:→ bbbing: C++用阵列反而简单,每次让指标前进一格 112.104.14.163 10/11 10:52