Это зависит от определения «буквенно-цифрового символа» и «символа пунктуации».
Если мы, например, определим набор знаков пунктуации
const
PUNCT = ['.', ',', ':', ';', '-', '!', '?'];
и рассмотрим все другие символы буквенно-цифровые, тогда вы можете сделать
function RemovePunctuation(const Str: string): string;
var
ActualLength: integer;
i: Integer;
const
PUNCT = ['.', ',', ':', ';', '-', '!', '?'];
begin
SetLength(result, length(Str));
ActualLength := 0;
for i := 1 to length(Str) do
if not (Str[i] in PUNCT) then
begin
inc(ActualLength);
result[ActualLength] := Str[i];
end;
SetLength(result, ActualLength);
end;
Эта функция превращает строку в строку.Если вы хотите превратить строку в массив символов, просто сделайте
type
CharArray = array of char;
function RemovePunctuation(const Str: string): CharArray;
var
ActualLength: integer;
i: Integer;
const
PUNCT = ['.', ',', ':', ';', '-', '!', '?'];
begin
SetLength(result, length(Str));
ActualLength := 0;
for i := 1 to length(Str) do
if not (Str[i] in PUNCT) then
begin
result[ActualLength] := Str[i];
inc(ActualLength);
end;
SetLength(result, ActualLength);
end;
(Да, в Delphi строки используют индексацию на основе 1, тогда как массивы используют индексацию на основе 0. Это для историческихпричины.)