通过连接给定字符串的ASCII值,查找每个数字0-9的频率


在这个问题中,我们需要在合并所有字符的ASCII值后计算数字的频率。

解决此问题的办法是创建一个包含每个字符ASCII值的字符串,并计算字符串中数字的频率。

问题陈述 - 我们有一个包含不同字符的字符串alpha,字符串的长度为N。我们需要计算连接给定字符串字符的ASCII值后每个数字的频率。

示例

输入

alpha = "tutorialspoint"

输出

4 25 1 0 1 3 3 2 1 1

解释 - 连接每个字符的ASCII值后,我们得到字符串'11611711611111410597108115112111105110116'。

我们已经计算了ASCII字符串中数字的频率。

0的频率为4,1的频率为25,3的频率为1,4的频率为0,依此类推。

输入

alpha = "a";

输出

0 0 0 0 0 0 0 1 0 1

解释 - 结果ASCII字符串为97。因此,我们相应地打印了数字的频率。

输入

alpha = "123";

输出

1 1 0 0 1 2 0 0 0 1

解释 - ASCII字符串为495051,我们根据该字符串打印了数字的频率。

方法1

在这种方法中,我们首先通过连接每个字符的ASCII值来创建一个ASCII字符串。之后,我们将使用数组来计算给定字符串中每个数字的频率。

算法

步骤1 - 定义asc_str字符串变量并将其初始化为空字符串。

步骤2 - 开始遍历给定字符串。

步骤3 - 使用类型转换将字符转换为ASCII值,并将整数ASCII值转换为字符串。之后,将ASCII字符串值附加到asc_str字符串。

步骤4 - 现在,我们需要计算asc_str字符串中数字的频率。因此,定义大小为10的'dgFreq'数组并将其初始化为零。

步骤5 - 开始遍历asc_str字符串,并根据数字更新数组元素。

步骤6 - 依次打印每个数字的频率。

示例

#include <bits/stdc++.h>
using namespace std;

void findDigitFreq(string alpha) {
   // To store the ASCII value of the given string
   string asc_str = "";
   // Traverse the string
   for (int p = 0; p < alpha.size(); p++) {
      // Get ASCII value of current character and concatenate with the string
      asc_str += to_string((int)alpha[p]);
   }
   // Array to store dgFreq of digits
   int dgFreq[10] = {0};
   // Traverse asc_str
   for (int p = 0; p < asc_str.size(); p++) {
      // Increase digit frequency by 1
      dgFreq[asc_str[p] - '0']++;
   }
   // Show frequency of all digits
   for (int p = 0; p < 10; p++) {
      cout << dgFreq[p] << " ";
   }
}
int main() {
   string alpha = "tutorialspoint";
   findDigitFreq(alpha);
   return 0;
}

输出

4 25 1 0 1 3 3 2 1 1

时间复杂度 - O(N) 以获取每个字符的ASCII值。

空间复杂度 - O(N) 以创建asc_str字符串。

我们学习了如何获取字符的ASCII值以及如何使用给定问题计算字符串中每个数字的频率。程序员可以计算结果字符串中奇数和偶数数字的总数以进行更多练习。

更新于: 2023年8月24日

104 次查看

开启你的 职业生涯

完成课程获得认证

立即开始
广告

© . All rights reserved.