2013-12-08 53 views
1

我試圖做到這一點,所以一旦輸入不同的文本形狀將改變顏色,但它說('A''Z')是'期望'的問題,但收到一個字符串文字''一個'' '。我不知道如何解決它。任何幫助表示感謝,謝謝!子範圍聲明的問題

type 
    TCapitalLetter = ('A' .. 'Z'); //subrange of type char 
    TDigit = ('0' .. '9'); //subrage of type char 
+0

「它說那裏有一個問題」 不是PR的描述這對我們很有用。你從編譯器得到了什麼**精確**錯誤信息? (是的,我知道問題是什麼以及如何解決問題,但是你需要首先編輯你的問題並改進它。) –

+0

從這個問題你可以告訴我沒有經驗。我可能錯過了一些非常簡單的東西,所以我不認爲我需要擴展更多。 – user3077842

+0

我想解釋如何在這裏寫出更好的問題,以便您可以更快地獲得幫助。編譯器錯誤信息就在你面前;在你的問題中沒有包含它的絕對**沒有任何藉口。如果您希望我們給您**我們的時間**以幫助解決**您的問題**,您至少可以向我們提供您已有的信息,我們可以使用這些信息來做到這一點。 –

回答

2

你的定義是接近的,但它並不完全正確:

type 
    TCapitalLetter = 'A'..'Z'; 
    TDigit = '0'..9'; 

從您的其他問題,但是,我不認爲這就是你真正需要做的。您正在尋找會員資格(某些字符包含在該類型中),在這種情況下,您需要使用集合來完成。這是一個控制檯應用程序你可以編譯和測試:

program Project1; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils; 

type 
    TCapitalLetters = TSysCharSet; 
    TDigits = TSysCharSet; 

const 
    CapitalLetters: TCapitalLetters = ['A'..'Z']; 
    Digits: TDigits = ['0'..'9']; 

var 
    Temp, Output: string; 
    Ch: Char; 

begin 
    Output := ''; 
    Temp := 'Seems A Nice Test Answer'; 
    for Ch in Temp do 
    if CharInSet(Ch, CapitalLetters) then 
     Output := Output + Ch; 

    WriteLn(Output); 
    ReadLn; 
end. 

對於德爾福的早期(非Unicode)的版本,你需要使用set of Char代替TSysCharSet,並使用一個稍微不同的語法爲集合成員:

program Project1; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils; 

type 
    TCapitalLetters = set of Char; 
    TDigits = set of Char; 

const 
    CapitalLetters: TCapitalLetters = ['A'..'Z']; 
    Digits: TDigits = ['0'..'9']; 

var 
    Temp, Output: string; 
    Ch: Char; 

begin 
    Output := ''; 
    Temp := 'Seems A Nice Test Answer'; 
    for Ch in Temp do 
    if Ch in CapitalLetters then 
     Output := Output + Ch; 

    WriteLn(Output); 
    ReadLn; 
end. 

輸出測試應用程式:

Screen capture of test app output

+0

從字面上看,只需要刪除括號...知道這將是一件小事。鑑於你的第二個建議,這是一個好主意,但不是我想要做的密碼強度計。謝謝你。隨着我現在的代碼仍然存在問題,現在形狀不會改變顏色,直到任何文本完全退後。明天我會再看看這個。再次感謝! – user3077842

+0

你的「密碼強度計」將需要迭代用戶輸入的文本來查看輸入了多少個UPPER,更低和數字,對嗎?我在第二個示例中使用的代碼將允許您這樣做,如果您將測試添加爲小寫字母和數字,並實現計數器而不是僅收集字母。 –

+0

一套字符不會在Unicode Delphi中編譯,不幸的是。無論如何,使用像TCharacter.IsUpper等字符屬性測試器更清晰。 –