C++ 通过连接给定字符串的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
解释 - 97是结果的ASCII字符串。因此,我们相应打印了数字的频率。
输入
alpha = "123";
输出
1 1 0 0 1 2 0 0 0 1
解释 – ASCII字符串为495051,我们根据这个字符串打印数字的频率。
方法
在这种方法中,我们首先通过连接每个字符的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
时间复杂度 - 获取每个字符的ASCII值的时间复杂度为O(N)。
空间复杂度 - 创建asc_str字符串的空间复杂度为O(N)。
通过这个问题,我们学会了获取字符的ASCII值以及计算字符串中每个数字的频率。程序员可以计算结果字符串中奇数和偶数数字的总数,以便进行更多的练习。