代码之家  ›  专栏  ›  技术社区  ›  diego

帮助Pascal编写单词计数器

  •  2
  • diego  · 技术社区  · 15 年前

    我必须用Pascal编写一个程序,它必须检测一个文本(由用户输入)中以某个字母开头的单词数。我不能用数组,你能告诉我从哪里开始吗?

    5 回复  |  直到 15 年前
        1
  •  3
  •   DVK    15 年前

    如果你知道哪个字母,你只需要保留一个计数器,不需要数组。

    如果你不知道是哪一个字母,请保留26个计数器。很蠢,但按你的要求做。

        2
  •  1
  •   JohnFx    15 年前

    首先要做的是定义构成字母的字符集,或者反过来定义构成非字母的字符集。

        3
  •  0
  •   aspitzer    15 年前

    如果空格字母和第一个单词匹配,则对其进行计数。

        4
  •  0
  •   Steve Claridge    15 年前

    (S) 是您的输入字符串;

    1. 创建一个从1到(S)-1长度的for循环。
    2. 如果步骤2中的条件匹配,则递增计数器。

    注意循环大小的负号。

    另外,请记住,字符串的第一个字母可能是您要匹配的字母,而上面定义的循环不会提取这个字母。

    如果您需要使代码更智能,因为它可以定位特定的字母,而不是硬编码的“t”,那么您可以将请求的字符作为参数传递给循环所在的函数/过程。

        5
  •  -2
  •   Despatcher    15 年前

    从我头上掉下来-没有测试过

    function WordCount(const S: string; const C: Char): Integer;
    const
      ValidChars: Set of Char [A..Z, a..z]; // Alter for appropriate language
    var
      i : Integer;
      t : string;
    begin
      Result := 0;
      if Length(S) <> 0 then
      begin
        t := Trim(S); // lose and leading and trailing spaces
        t := t + ' '; // make sure a space is the last char
        repeat
          if (t[1] in ValidChars) and (t[1] = C then
            inc(Result);
          i := Pos(' ', t);
          t := Copy(t(i+1, Length(t));
        until Length(t) = 0;
      end;
    end;
    

    为什么需要数组或case语句?