我必须用 Pascal 编写一个程序,它必须检测文本(用户输入)中有多少单词以某个字母开头。我不能使用数组,你能给我一些关于从哪里开始的提示吗?
diego
问问题
3729 次
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 到 (S) - 1 长度的 for 循环。
- 在循环内部,检查是 (S)[i] = ' ' 和 (S)[i+1] = 't' 其中 i 是循环计数器,'t' 是您要计算的单词的开头字母
- 如果第二步中的条件匹配,则增加一个计数器。
注意循环大小的负一。
另外,请记住,字符串的第一个字母可能是您要匹配的字母,并且不会被上面定义的循环拾取。
如果您需要使代码更智能,因为它可以定位特定字母而不是硬编码的“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 回答