-2

编辑:真的很抱歉,我的意思是Java!至于我的想法,我会说第一个包含 if 语句是用于 s == null 或长度 0,但我对放入什么感到困惑

返回 spaceCount(s.substring(1, ......)) + ......;

部分。

我正在尝试使用一些 if 语句来编写一个函数,该函数将字符串作为参数并递归地计算空格“”的数量。到目前为止我有

public static int spaceCount (string s) {
    if ( ...... ) {
        return 0;
    }
    char c = s.charAt(0);
    if (....... ) {
        return spaceCount (.....);
    } else {
        return spaceCount(s.substring(1, ......)) + ......;
    }
}

那么在第一个 if 语句中,我应该写字符串长度为零的情况吗?我很确定这根本不会涵盖没有空格的情况,所以我不确定如何进行。

对于第二个和第三个,我知道我必须扫描字符串中的空格,但我也不确定该怎么做。任何提示或方向将不胜感激!

4

4 回答 4

3
public static int spaceCount(final String s) {

    if(s == null || s.length() == 0) {
        return 0;
    }

    char c = s.charAt(0);
    if(' ' != c) {
        return spaceCount(s.substring(1));
    } else {
        return spaceCount(s.substring(1)) + 1;
    }

}

您不必“扫描字符串中的空格”,这就是传递字符串其余部分的递归所做的。

于 2013-05-07T01:44:01.363 回答
2
s.length() - s.replaceAll(" ", "").length() returns you number of spaces.

如何计算java字符串中的空格?有答案。可能它可能会有所帮助。上面的行是最简单的。

于 2013-05-07T01:50:11.173 回答
0

[您没有指定编程语言] 这是 Java 中的解决方案:

public static int spaceCount(String s)
{ return scRecursive (s, s.length, 0, 0); }

public static int scRecursive (String s, int len, int dex, int count)
{ if (len == dex) return count;
  else
    return scRecursive (s, len, dex + 1,
                        (' ' == s.charAt(dex) ? count + 1 : count)); }

这是尾递归(这可能意味着一些效率),更重要的是,这不会复制/分配子字符串

这是Scheme中的一个:

(define (space-count string)
  (let ((length (string-length string)))
    (let stepping ((index 0) (count 0)
      (if (= index length)
          count
          (let ((char (string-ref string index)))
            (stepping (+ index 1)
                      (if (equal? #\space char)
                          (+ 1 count)
                          count)))))))

递归在stepping具有两个参数的调用中 - 当前索引和当前空格数。当索引等于长度时递归终止。当当前字符为空格时,计数会增加。

于 2013-05-07T01:44:44.550 回答
0
public class CountSpaces {

    public static void main(String[] args) {
        String str = "     A   ";
        System.out.println(spaceCount(str, 0));
        System.out.println(spaceCount(str));
    }

    public static int spaceCount(String str, int count) {
        if (str == null) {
            return 0;
        } else if (str.length() > 0) {
            char c = str.charAt(0);
            if (Character.isWhitespace(c)) {
                count++;
            }
            return spaceCount(str.substring(1), count);
        } else {
            return count;
        }
    }

    public static int spaceCount(String s) {
        if (s.length() == 0 || s == null) {
            return 0;
        }
        char c = s.charAt(0);
        if (!Character.isWhitespace(c)) {
            return spaceCount(s.substring(1));
        } else {
            return spaceCount(s.substring(1, s.length())) + 1;
        }
    }
}
于 2013-05-07T02:14:45.143 回答