hcnak.blog

posted at 2015-06-14 18:02:08 +0000

C++字符统计算法

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

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

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

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

再经过第二次遍历,统计ibuf中的所有字符出现次数.

最后,输出结果…..

本文章源代码如下: ```c++ // 字符统计算法. 该算法可以用来统计在一个字符串中各个字符的出现次数. by Kanch @2015-2-6_ /

#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 << "不相同字符." <<endl;
    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; } ``` 


© kanchzl AT kanchz DOT com

last updated on 2022-07-27 01:57:54 +0000