帮助Pascal写一个单词计数器

时间:2009-10-07 04:01:39

标签: pascal

我必须在Pascal中编写一个程序,它必须检测文本上的字数(由用户输入)以某个字母开头。我不能使用数组,你能给我一些关于从哪里开始的提示吗?

5 个答案:

答案 0 :(得分:3)

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

如果您不知道哪个字母,请保留26个计数器。愚蠢,但按照你的规范工作。

答案 1 :(得分:1)

要做的第一件事是定义构成字母的字符集,或者相反哪些字符构成非字母。

编写一个带有字符的函数,并根据该字符是否为字母返回一个布尔值。然后遍历字符串并为每个字符调用它。当你在非字母后面或字符串开头处检测到一个字母时,如果它是目标字母,请递增你的计数器。

答案 2 :(得分:0)

计算SPACE LETTER的实例加上第一个匹配的单词。

答案 3 :(得分:0)

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

  1. 创建一个从1到长度为(S) - 1的for循环。
  2. 内部循环,检查是(S)[i] =''和(S)[i + 1] ='t',其中i是循环计数器,'t'是开始计算单词的字母
  3. 如果第二步中的标准匹配,则递增一个计数器。
  4. 注意循环大小的减号。

    另外,请记住,字符串的第一个字母可能是您想要匹配的字母,并且不会被上面定义的循环拾取。

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

答案 4 :(得分:-2)

脱离我的头脑 - 未经测试

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语句?