2015-04-17 268 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不提供源代码。 –

相关问题