c#统计一个字符在字符串出现次数的函数

前几天遇到过一个函数,可以用来统计一个字符在字符串出现次数,现在想用忘了函数名字,网上没查到,谁知道说一下。另外想某一些分散的字符从字符串中删除,用remove()可以吗?用replace()将要替换的字符用null替换可以吗?有没有网站可以查询c#中的函数及功能

C#中没有统计子字符串出现次数的函数,那么如何在C#求出字符串中某字符的出现次数,比如求“ADSFGEHERGASDF”中“A”出现的次数。首先想到的方法当然是从头遍历字符串并统计:

c1 = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] == 'A')
{
c1++;
}
}

第二种方法也很容易想到,将字符串中所有要查找的字符去除,然后比较去除前后的字符串长度即可。这种方法遭到了某人的鄙视,据说性能很差而且多占空间。

c2 = str.Length - str.Replace("A", String.Empty).Length;

接下来某人又提出了第三种方法,是用要查找的字符为分隔符,将原字符串分隔为多个子串,然后求子串的数目即可。在C#中这是一个写起来很短的方法:

c3 = str.Split(new char[] { 'A' }).Length - 1;

我们从原理可以推断出三者性能的顺序,但究竟差距是多少呢,还是要动手试验一下。这是非常经典的测试代码:

string str = "SADTHDGSAFSDGTGHRDGSADFADDRHDFSGASDAA";

Stopwatch sw = new Stopwatch();

long t;
int c = 0;
GC.Collect();
Application.DoEvents();

sw.Start();

for (int i = 0; i < 100000; i++)
{
c = 三种算法
}

sw.Stop();

t = sw.ElapsedMilliseconds;

首先我们确保正确性,经测试三种方法都能正确处理多种情况,包括首尾、连续出现、不出现或串长度为0等,我所取的字符串是一个很普通的串。编译为Release版,预运行10次后获得以下结果:

遍历统计:13毫秒
替换后比较长度:112毫秒
断开字符串后计数:233毫秒

这里已经体现出差异,遍历统计比替换后比较要快10倍,断开字符串又要慢一些。接下来我又做了如下两个测试:

1、不改变字符串的长度,增加或减少要查找字符串的个数。
2、不改变要查找字符出现的频率,但增长字符串的长度。

结果发现,三种方法都随字符串长度增加线性变慢,而后两种方法还随要查找的字符增加而变慢。断开字符串的方法还受要查找字符串分布情况的影响。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-23
统计一个字符在字符串出现次数 可以使用split(char c)函数 c就是你要统计的字符,函数的返回值再减1就是字符出现的次数。本回答被提问者采纳
第2个回答  2011-01-16
//没有现成的函数,我写的是伪代码,希望能够剩下的你自己实现
//s为主串,t为匹配串
int i,j,m,n;
j=strlength(s);
m=strlength(t);
if((k>j)||(k<0))return ERROR;
for(i=0;i<=j-m+1;i++)
{
substr(&sub,s,i,k)
if(strcompare(t,sub)==0)
{
n++;//计数器
}
}
相似回答