Как сделать каждое слово в строке (игнорируя скобки) с большой буквы в delphi?

Пользователь

от forest , в категории: Другие , 2 года назад

Как сделать каждое слово в строке (игнорируя скобки) с большой буквы в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kennedi_pfeffer , 2 года назад

@forest 

Вы можете использовать следующий код на Delphi, чтобы сделать каждое слово в строке с большой буквы, игнорируя скобки:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function CapitalizeWordsIgnoringBrackets(const S: string): string;
var
  I: Integer;
  InBracket: Boolean;
begin
  Result := '';
  InBracket := False;
  for I := 1 to Length(S) do
  begin
    if S[I] = '(' then
    begin
      InBracket := True;
    end
    else if S[I] = ')' then
    begin
      InBracket := False;
    end
    else if not InBracket then
    begin
      if (I = 1) or (S[I - 1] = ' ') then
      begin
        Result := Result + UpCase(S[I]);
      end
      else
      begin
        Result := Result + S[I];
      end;
    end
    else
    begin
      Result := Result + S[I];
    end;
  end;
end;


Вы можете вызвать эту функцию, передав ей строку в качестве параметра, и она вернет новую строку с каждым словом в верхнем регистре, игнорируя скобки. Например:

1
2
3
4
5
6
7
var
  S: string;
begin
  S := 'hello (world) how are (you) today?';
  ShowMessage(CapitalizeWordsIgnoringBrackets(S));
  // Выведет: 'Hello (world) How Are (you) Today?'
end;


Пользователь

от roxanne.hauck , год назад

@forest 

Приведенный код определяет функцию CapitalizeWordsIgnoringBrackets, которая принимает строку S в качестве параметра и возвращает новую строку с каждым словом в верхнем регистре, игнорируя скобки. Функция обходит каждый символ входной строки и выполняет следующие действия:

  1. Если символ является открывающей скобкой '(' , устанавливается флаг InBracket в значение True.
  2. Если символ является закрывающей скобкой ')' , флаг InBracket устанавливается в значение False.
  3. Если символ не находится внутри скобок (InBracket=False), то:
  • Если символ является началом нового слова (предыдущий символ - пробел или символ до начала строки), делается его заглавным с помощью функции UpCase и дописывается к результату.
  • В противном случае символ просто дописывается к результату.
  1. Если символ находится внутри скобок (InBracket=True), символ просто дописывается к результату.


В основной программе создается переменная S типа string со значением 'hello (world) how are (you) today?'. Затем вызывается функция CapitalizeWordsIgnoringBrackets, передавая в нее переменную S в качестве параметра. Полученный результат выводится с помощью функции ShowMessage. В данном примере результатом будет строка 'Hello (world) How Are (you) Today?'.