C++字符统计算法

首先说说思路:假设我们有一个待统计字符串ibuf.现在要统计其中每个字符出现的次数.

首先我们需要确定的是这个字符串有多少个不同的字符.以便建立统计缓存.

所以我们遍历整个ibuf(假设其长度为ilen),将其中的字符无重复的放入临时字符串differList(假设其长度为llen).

根据differList字符串的长度建立相应的统计缓存数组.统计缓存数组如下:

  • int *count = new int[llen];
    再经过第二次遍历,统计ibuf中的所有字符出现次数.

最后,输出结果…..

————————————————–

本文章源代码如下:

//
字符统计算法.
该算法可以用来统计在一个字符串中各个字符的出现次数.
by Kanch @2015-2-6
/

#include

#include

#include

using namespace std;

int main(int argc, char argv[])
{
string ibuf = “”, obuf = “”,differList=””;
int ilen = 0,*count,llen;

cout << “请输入数据,程序将会统计字符出现次数!-输入 EXIT 退出程序.” << endl; cin >> ibuf;
while (ibuf != “EXIT” && ibuf != “exit”)
{
//开始统计
if (ibuf.length()<=0)
{
cout << “没有检测到任何数据请重新输入!-输入 EXIT 退出程序.” << endl; continue; } else if (ibuf.length() > 0)
{
ilen = ibuf.length();
for (int i = 0; i < ilen; i++) //这个循环用来统计有多少个不同的字符
{
if (differList.find(ibuf[i]) < 0 || differList.find(ibuf[i]) >= differList.length())
{
differList += ibuf[i];
}
}
llen = differList.length(); //这里来确定需要循环多少次.有多少个不同的字符就循环多少次
count = new int[llen]; //为每个待统计字符分配统计空间.顺序与differList里面的一样.
for (int e = 0; e < llen; e++)
{
count[e] = 0;
}

//下面开始统计
/*法一
for (int i = 0; i < len; i++) //这是最笨的方法
{

for (int t = 0; t < ibuf.GetLength(); t++) //这个用来逐个统计每个字符出现的次数;
{
if (differList[i] == ibuf[t])
{
count[i] += 1;
}
}
}
/
/
法二*/
for (int i = 0; i < ilen; i++) //个人比较喜欢这个方法.
{
count[differList.find(ibuf[i])] += 1;
}

//算法结束,下面输出结果
cout << “===========================结果=============================” << endl
<< “共”<< ilen << “个字符.” << “其中有” << llen << “不相同字符.” < for (int i = 0; i < llen; i++)
{
cout << “ “ << differList[i] << “t “ << count[i] <<endl;
}
}
cin.clear();
differList = “”;
cout << “请输入数据,程序将会统计字符出现次数!-输入 EXIT 退出程序.” << endl; cin >> ibuf;
delete [] count;

}

return 0;
}
 

0%