gpt4 book ai didi

c++ - 如何防止频率表在 C++ 中计算 '' 空框''

转载 作者:行者123 更新时间:2023-11-28 04:36:12 26 4
gpt4 key购买 nike

我写了下面的代码(用于家庭作业)计算字母和数字并生成一个频率表。我的问题是:当字母或数字不存在时如何停止频率生成

使用我编写的代码,程序会计算输入的每个字母,但也会为 ASCII 代码中的每个可能的字母/数字发布一行。

希望我的问题问对了,感谢任何帮助或建议!

#include <iostream>
#include <string>

using namespace std;

int countingLetters(string someWords);

int countingNumbers(string someWords);

int frequency(string someWords, double totalChar);

int main() {
string someWords;
cout << "Write a some words: " << endl;
getline(cin, someWords);
cout << "You wrote:" << someWords << '\n';

cout << "Your sentence has " << someWords.length() << " characters." << '\n';

double totalChar = someWords.length();

cout << "Your sentence has " << countingLetters(someWords) << " letters." << '\n';

cout << "Your sentence has " << countingNumbers(someWords) << " numbers." << '\n';

cout << "Frequency of signs and letters :" << endl;

frequency(someWords, totalChar);


return 0;
}

int countingLetters(string someWords) {
int count = 0;
for (int i = 0; i < someWords.length(); i++) {
if (someWords[i] >= 'a' && someWords[i] <= 'z')
count++;
}
return count;
}

int countingNumbers(string someWords) {
int count = 0;
for (int i = 0; i < someWords.length(); i++) {
if (isdigit(someWords[i]) != 0)
count++;
}
return count;
}

int frequency(string someWords, double totalChar) {
cout << " Letter" << '\t' << "Antal" << '\t' << "Procent" << endl;
int frequency[255]={0};
for (int i = 0; i < someWords.length(); i++) {
char c = someWords[i];
if (isdigit(c) != 0)
frequency[c]++;
if (isalpha(c) != 0)
frequency[c]++;
}
for (int i = 0; i < sizeof(frequency); i++) {
if(frequency[i]>0)
cout << '\t' << static_cast<char>(i) << '\t' << frequency[i] << '\t' << frequency[i]/totalChar << endl;
}

return 0;
}

最佳答案

sizeof(frequency)frequency 数组的大小(以字节为单位)。如果数组除以一个数组元素的字节大小,则您需要元素的数量,即以字节为单位的大小:

这是 frequency 数组的元素数:

sizeof(frequency) / sizeof(frequency[0])

但是当您使用 C++ 时,您不应该使用原始数组,而是 std::array:

#include <array>
...
int frequency(string someWords, int totalChar) {
cout << " Letter" << '\t' << "Antal" << '\t' << "Procent" << endl;
std::array<int, 255> frequency{0};

for (int i = 0; i < someWords.length(); i++) {
char c = someWords[i];
if (isdigit(c) != 0)
frequency[c]++;
if (isalpha(c) != 0)
frequency[c]++;
}

int x = frequency.max_size();

for (int i = 0; i < frequency.max_size(); i++) {
if (frequency[i]>0)
cout << '\t' << static_cast<char>(i) << '\t' << frequency[i] << '\t' << frequency[i] / totalChar << endl;
}

return 0;
}

还有改进的空间。

关于c++ - 如何防止频率表在 C++ 中计算 '' 空框'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com