寻查找重复字符的算法 (50分)

  • 主题发起人 主题发起人 yz
  • 开始时间 开始时间
Y

yz

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在一个字符串中查找重复的字符,如aaaaaaaa,重复字符为a、aa、aaa、aaaa,字符串的长度不定。
 
自己写,很简单,不过
你先说清楚你的意思
是要找字符串中子字符串的个数和位置么?
 
有个strcon 专门处理字符串的函数集,很好的哦.
 
不明白你的要求。。[:(]
 
正则表达式就行了,,,:)
 
也许是我没有说清楚,再说的详细一些,举个例子吧。

如下一段字符串:
“如何在一个字符串中查找重复的字符,如aaaaaaaa,重复字符为a、aa、aaa、aaaa,字符串的长度不定。”

重复的有“如”、“字”、“字符”、“的”等等。
要求输入这一段字符串,输出重复的字符。


 
procedure TForm1.Button1Click(Sender: TObject);
var
s,s0:string;
i,j:integer;
begin
s:=Edit1.Text
// 'aaaaaaaa'
for i:=1 to length(s) div 2 do
for j:=1 to (length(s)-i+1) div 2 do
begin
s0:=copy(s,i,j);
if pos(s0,copy(s,i+j,MaxInt))>0 then
if ListBox1.Items.IndexOf(s0)=-1 then
ListBox1.Items.Add(s0)
// 输出结果
end;
end;
 
我想你还是没有说清楚: 如果加入对中文字符的判断的话, 复杂程度增加了.
你真的是这个意思吗? 如果是, 那么我刚才给出的代码段也不能算完全正确的了.
下面是改进后的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
s,s0:widestring;
i,j:integer;
begin
s:=Edit1.Text
// 'aaaaaaaa'
for i:=1 to length(s) div 2 do
for j:=1 to (length(s)-i+1) div 2 do
begin
s0:=copy(s,i,j);
if pos(s0,copy(s,i+j,MaxInt))>0 then
if ListBox1.Items.IndexOf(s0)=-1 then
ListBox1.Items.Add(s0)
// 输出结果
end;
end;

对于输入字符串:
"如何在一个字符串中查找重复的字符,如aaaaaaaa,重复字符为a、aa、aaa、aaaa,字符串的长度不定。"

输出为:


字符
字符串

符串


重复



a
aa
aaa
aaaa
aaaa,
aaa,
aa,
a,

-------------------------------------
两段代码你不妨对比一下有什么不同
 
接受答案了.
 
后退
顶部