如何从字符串中删除字符,直到第一个字符是一个字母?
发布时间:2020-12-15 09:41:55 所属栏目:大数据 来源:网络整理
导读:我有一个使用字符串(Pascal)的程序.如果第一个字符不是字母,那么在读取字符串后,我需要删除所有第一个字符,直到第一个字符为一个字母.我曾尝试多次写它,但总是删除所有字符串或没有. 如果程序读
我有一个使用字符串(Pascal)的程序.如果第一个字符不是字母,那么在读取字符串后,我需要删除所有第一个字符,直到第一个字符为一个字母.我曾尝试多次写它,但总是删除所有字符串或没有.
如果程序读取“123%^& abc”,则结果应为“abc” 这是我有多远: variables a: set of 65..90; b: set of 97..122; ------------------- bool:=false; While (bool=false) do begin Writeln(s[1]); If (Ord(s[1]) in a) or (Ord(s[1]) in b) then begin bool:=true; end else delete(s,1,1); end; 我不明白为什么它不起作用? 解决方法
你可以做到
function RemoveNonAlphaASCIIFromStart(const Str: AnsiString): AnsiString; const ALPHA = ['A'..'Z','a'..'z']; var i: Integer; firstIndex: integer; begin result := ''; firstIndex := 0; for i := 1 to length(Str) do if Str[i] in ALPHA then begin firstIndex := i; break; end; if firstIndex > 0 then result := Copy(Str,firstIndex,length(Str)); end; 或者,作为一个程序 procedure RemoveNonAlphaASCIIFromStart(var Str: AnsiString); const ALPHA = ['A'..'Z','a'..'z']; var i: Integer; firstIndex: integer; begin firstIndex := 0; for i := 1 to length(Str) do if Str[i] in ALPHA then begin firstIndex := i; break; end; if firstIndex > 0 then Delete(Str,firstIndex - 1) else Str := ''; end; 对于更复杂的方法,也适用于Unicode Delphi,请参阅my answer to a similar question. [这将从字符串中删除所有非alpha字符.] 那么,为什么你的算法不起作用呢?嗯,它应该工作,它适用于我.但请注意,它可以用稍微优雅的形式编写 const ALPHA = ['A'..'Z','a'..'z']; while true do if (length(s) = 0) or (s[1] in ALPHA) then break else delete(s,1); 然而,OP的原始代码的一个问题是,如果s是空字符串,它将失败.实际上,s [1]不存在.如果s完全由非字母字符组成(例如’!“#¤%),它将无法工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |