21xrx.com
2024-11-05 16:35:06 Tuesday
登录
文章检索 我的文章 写文章
C++字符统计
2023-07-07 17:51:07 深夜i     --     --
C++ 字符 统计

在C++编程中,字符统计是一个基础的操作。通过统计字符串中各种字符的出现次数,我们可以得到一些有用的信息,例如字符串的重复率、出现最多的字符等等。另外,字符统计也是其他一些问题的预处理步骤,例如字符串匹配等。

下面展示一个简单的C++程序,用于统计字符串中各个字符的出现次数。


#include <iostream>

#include <cstring>

using namespace std;

int main()

{

  string str;

  getline(cin, str); // 读取输入的字符串

  int counts[256] = {0}; // 初始化计数器

  for(int i = 0; i < str.length(); i++)

  {

    counts[(unsigned char)str[i]]++; // 统计每个字符出现的次数

  }

  for(int i = 0; i < 256; i++)

  {

    if(counts[i] != 0)

    {

      cout << (char)i << ": " << counts[i] << endl; // 输出每个字符和其出现次数

    }

  }

  return 0;

}

以上程序使用了一个长度为256的整型数组来记录每个字符出现的次数,其中ASCII码值相同的字符被归为同一个类别。由于输入的字符串可能包含空格和其他特殊字符,因此我们需要使用getline函数来读取整个字符串。在统计字符次数时,我们需要将每个字符转换为unsigned char类型,以避免在统计中出现错误。

上面的程序在处理一些简单的输入时能够正常工作,但是在输入相对较大的字符串时,计算次数的时间复杂度很容易变成瓶颈。因此,在处理大字符串时,我们需要使用更高效的算法来记录每个字符的出现次数。其中一种被广泛使用的算法是哈希表,它能够以O(1)的时间复杂度查找每个字符是否出现过,并记录它出现的次数。

在C++中,我们可以使用unordered_map来实现哈希表。以下是一个使用unordered_map来统计字符串中各个字符出现次数的例子:


#include <iostream>

#include <unordered_map>

using namespace std;

int main()

{

  string str;

  getline(cin, str);

  unordered_map<char, int> counts;

  for(int i = 0; i < str.length(); i++)

  {

    counts[str[i]]++; // 利用unordered_map记录每个字符出现的次数

  }

  for(auto it = counts.begin(); it != counts.end(); it++)

  

    cout << it->first << ": " << it->second << endl; // 输出每个字符和其出现次数

  

  return 0;

}

以上程序使用了一个unordered_map来记录每个字符出现的次数,而不需要使用固定长度的数组,因此可以处理更大的字符串。通过这个例子,我们可以看到,C++提供了许多不同的工具来帮助我们处理字符统计问题,我们可以根据不同的需求选择最合适的工具。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复