2

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

4

5 回答 5

3

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

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

于 2009-10-07T04:05:29.940 回答
1

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

编写一个函数,该函数接受一个字符并根据该字符是否为字母返回一个布尔值。然后遍历字符串并为每个字符调用它。当您在非字母之后或字符串开头检测到一个字母时,如果它是目标字母,则增加您的计数器。

于 2009-10-07T04:29:21.863 回答
0

如果匹配,则计算空格字母加上第一个单词的实例。

于 2009-10-07T11:42:09.387 回答
0

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

  1. 创建一个从 1 到 (S) - 1 长度的 for 循环。
  2. 在循环内部,检查是 (S)[i] = ' ' 和 (S)[i+1] = 't' 其中 i 是循环计数器,'t' 是您要计算的单词的开头字母
  3. 如果第二步中的条件匹配,则增加一个计数器。

注意循环大小的负一。

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

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

于 2009-10-07T11:57:12.487 回答
-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 语句?

于 2009-10-15T08:53:28.853 回答