我是一名10年级的IT学生,所以我对Delphi相对较新。我需要制作一个程序,从编辑框接收句子作为输入。单词的数量和每个的长度。我可以在句子中找到第一个空格的位置,但不知道如何找到每个空格。
有人可以帮忙吗?
答案 0 :(得分:4)
这取决于您使用哪个版本的Delphi。以下是两种可能的解决方案:
var input : string; aword : string; r: Integer; allowedchars : set of 'A'..'z'; begin allowedchars:=['A'..'z']; ListBox1.Clear; input:='This is my test sentence. Feel free to count words, or let it count!'; for r := 1 to Length(input) do begin if(input[r] in allowedchars)then begin aword:=aword+input[r]; end else begin if(length(aword)>0)then ListBox1.Items.Add(Format('%s: %d',[aword,Length(aword)])); aword:=''; end; end; end;
var input : string; words : TArray<string>; aword : string; begin ListBox1.Clear; //1. Use the Split Helper Method, from XE3 and newer Delphis input:='This is my test sentence. Feel free to count words, or let it count!'; words:=input.Split(['.',';',',','!','?',' '],TStringSplitOptions.ExcludeEmpty); ListBox1.Items.Add(Format('Words: %d',[Length(words)])); for aword in words do begin ListBox1.Items.Add(Format('%s: %d',[aword,aword.Length])); end; end;
答案 1 :(得分:2)
您可以使用TStringList
类将字符串拆分为具有指定Delimiter属性和DelimitedText
方法的子字符串。
program Project1;
{$APPTYPE CONSOLE}
uses
System.SysUtils,Classes;
procedure CheckString( const someText: String; var wordLength: TArray<Integer>);
var
aList: TStringList;
i: Integer;
begin
aList := TStringList.Create;
try
aList.Delimiter := ' '; // Define the delimiter
aList.DelimitedText := someText; // Split the text
SetLength(wordLength,aList.Count); // Set the result word count
for i := 0 to Pred(aList.Count) do
begin
wordLength[i] := Length(aList[i]); // Set the word length
end;
finally
aList.Free;
end;
end;
var
s: String;
counter: TArray<Integer>;
i: Integer;
begin
s := 'This is a test.';
CheckString(s,counter);
WriteLn('Found words:',Length(counter));
for i := 0 to Pred(Length(counter)) do
WriteLn(counter[i]);
ReadLn;
end.
如果您使用的是较旧版本的Delphi,请将TArray<Integer>
替换为TIntegerDynArray
单元中定义的Types
。
在旧的Delphi-7中,你必须自己声明:
Type
TIntegerDynArray = array of Integer;
如果要在拆分前从字符串中排除某些字符,请使用以下函数:
function StripChars(const aSrc, aCharsToStrip: string): string;
var
i: Integer;
begin
Result := aSrc;
for i := 1 to Pred(Length(aCharsToStrip) do
Result := StringReplace(Result, aCharsToStrip[i], '',
[rfReplaceAll, rfIgnoreCase]);
end;
// Example call
myString := StripChars(s,'.,!?;');
答案 2 :(得分:1)
您可能会发现posex
功能非常有用......如果它是D7的一部分
否则,请查找delete
函数或copy
函数。