第一种(原型):
///
///
清除字符串数组中的重复项
///
///
字符串数组
///
字符串数组中单个元素的最大长度
///
public
static
string[]
DistinctStringArray(string[]
strArray,
int
maxElementLength)
{
Hashtable
h
=
new
Hashtable()
foreach
(string
s
in
strArray)
{
string
k
=
s
if
(maxElementLength
>
0
&&
k.Length
>
maxElementLength)
{
k
=
k.Substring(0,
maxElementLength)
}
h[k.Trim()]
=
s
}
string[]
result
=
new
string[h.Count]
h.Keys.CopyTo(result,
0)
return
result
}
第二种(扩展):
///
///
清除字符串数组中的重复项
///
///
字符串数组
///
public
static
string[]
DistinctStringArray(string[]
strArray)
{
return
DistinctStringArray(strArray,
0)
}
调用方法和测试:
string[]
abc
=
{
"a",
"b",
"c",
"b",
"d"
}
string[]
ccc
=
ExfSoft.Common.Utils.DistinctStringArray(abc)
Response.Write(string.Join(",",
ccc))
//输入结果为:a,b,c,d
这样就过滤掉b重复项
实现原理:1、循环数组里的每项2、判断是否是要限定字符串的长度(0-不限制)3、增加Hashtable项,key和值都是当前循环得到的数组的值,两个相当的。
统计字符串中的重复字符,可以通过简单哈希算法来实现。有效的字符的ascii值在0-127之间,定义一个128位的数组,初始化为0,用数组下标对应相应的字符,数组元素值表示字符出现的频率,统计相应字符的个数,个数大于1的字符就是重复的。
参考代码如下:
#include
void main()
{
char s[1024]
int carr[128]={0}
int i
printf("input a string: ")
gets(s)
for( i=0s[i]i++ )
{
int index=s[i]
if ( index >=0 &&index <= 127 ) //安全处理,防止输入异常时,程序出错
carr[index]++
}
for( i=0i<128i++ )
if ( carr[i] >1 )
printf("%c:%d\n", i, carr[i] )
}运行结果:
input
a
string:
hello
world
l:3
o:2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)