2015-04-17 302 views
-1

我有這個字符串,我需要製作一些字符資本,所以我使用UpCase命令......但是如果我需要從大寫字符中創建小字符,該怎麼辦?在這種情況下我使用什麼?需要在Delphi中將大寫字母改爲小寫字母

+0

種類依賴。 Delphi的哪個版本?文本是如何編碼的?你想如何處理區域設置? –

+0

我正在使用德爾福7,文本是在經典句子的文本文件,我不明白你的最後一個問題..並沒有它不是LowerCase命令,因爲LowerCase命令需要字符串輸入,但我需要用單個字符。 –

+0

別擔心。 Delphi可以爲你隱式處理。你可以自由地將'Char'傳遞給帶有'string'參數的函數。 – TLama

回答

3

UpCase不是區域意識,只能處理英語的26個字母。如果這真的是你所需要的,那麼你可以創建一個這樣相當於LoCase功能:

function LoCase(ch: AnsiChar): AnsiChar; overload; 
begin 
    case ch of 
    'A'..'Z': 
    Result := AnsiChar(Ord(ch) + Ord('a')-Ord('A')); 
    else 
    Result := ch; 
    end; 
end; 

function LoCase(ch: WideChar): WideChar; overload; 
begin 
    case ch of 
    'A'..'Z': 
    Result := WideChar(Ord(ch) + Ord('a')-Ord('A')); 
    else 
    Result := ch; 
    end; 
end; 
+0

是我需要的全部,但真的沒有更簡單的東西嗎?因爲我會在需要20分鐘編寫代碼的考試中得到它。 –

+0

你會如何建議使這更簡單?我根本看不出任何複雜性。你在考試中需要這個事實是你的問題。更重要的是,如果您對可接受的解決方案有更多的限制,是否它們不應該出現在問題中?如果你不叫它,可以隨意忽略'WideChar'超載。 –

+0

什麼是AnsiChar?和Widechar –

2

你應該學會如何找到你自己的解決方案,而不是如何使用谷歌或計算器:)

你在System.pas中有U​​pCase函數的來源。看看它是如何工作的。所有這些都是從小寫字符中減去32。如果你想得到相反的結果,加32而不是減去它。德爾福的幫助會告訴你什麼DecInc做什麼。

var 
    S: string; 
    I: Integer; 
begin 
    S := 'ABCd'; 

    for I := 1 to Length(S) do 
    if S[I] in ['A'..'Z'] then // if you know that input is upper case, you could skip this line 
     Inc(S[I], 32); // this line converts to lower case 
end; 
+0

某些版本的Delphi不提供源代碼。 –

相關問題