0

文字列内の母音を検索するプログラムを作成しています。母音が見つかったら、母音を文字列から削除する必要があります。

 mystring := 'August'   ;

{if mystring[1] IN ['A','E','I','O','U'] ;}
for k := 1 to length(mystring) DO
BEGIN
if mystring[K] IN ['a','e','i','o','u']
then mystring[k] := ''

しかし、エラー

互換性のない型: 'Char' および 'String' が表示されます

文字列から母音を削除するにはどうすればよいですか?

4

4 に答える 4

4

探しているのはヌル文字値です。長さがゼロのエンティティである空の文字列を使用しようとしています。しかし、長さがゼロの文字はありません。探しているヌル文字値は単に存在しません

Length(mystring)これを確認する別の方法は、ループの最後にあるものを検討することです。でどの文字を割り当ててもmystring[k] := ...、 の長さmystringは変更されません。

したがって、既存の文字列を変更する代わりに、新しい文字列を作成できます。例えば:

var 
  new: string;
  len: Integer;
....
SetLength(new, Length(mystring));
len := 0;
for i := 1 to Length(mystring) do
begin
  if not (mystring[i] in ['a','e','i','o','u']) then
  begin
    inc(len);
    new[len] := mystring[i];
  end;
end;
SetLength(new, len);
mystring := new;

または、次の呼び出しを繰り返し行うこともできますStringReplace

mystring := StringReplace(mystring, 'a', '', [rfReplaceAll]);
mystring := StringReplace(mystring, 'e', '', [rfReplaceAll]);
//etc. 

このバージョンの使用StringReplaceは、最初のアプローチよりも遅くなります。

さらに別のアプローチは、その場で運用することです。

var 
  len: Integer;
....
len := 0;
for i := 1 to Length(mystring) do
begin
  if not (mystring[i] in ['a','e','i','o','u']) then
  begin
    inc(len);
    mystring[len] := mystring[i];
  end;
end;
SetLength(mystring, len);
于 2013-08-27T08:16:43.557 に答える
1

あなたの評価のためのもう一つの提案:

for i := 1 to Length(mystring) do
  if mystring[i] in ['a', 'e', 'i', 'o', 'u'] then
    mystring[i] := #1;
mystring := StringReplace(mystring, #1, '', [rfReplaceAll]);

アイデアは、すべての母音を文字#1に置き換えることです( #0は機能しません)。ループはそれを行います。次に、文字列内のすべての#1を空の文字列に置き換えることで削除します。これは、関数StringReplaceによって実現されます。

于 2013-08-27T13:08:16.413 に答える