【发布时间】:2018-12-01 18:31:57
【问题描述】:
我需要实现一个可以计算字符串中位数的函数。所以对于数字,但也适用于类似的东西:aD23b。如果我能让它工作......它应该看起来像:
输入:0912302
输出:
0:2
1:1
2:2
3:1
4:0
5:0
6:0
7:0
8:0
9:1
不幸的是,此时我无法编写任何有效的代码...我的基本想法是:使用循环检查输入中的每个字符,如果是数字,则将其存储在第二个数组中(比如说频率)。我遇到的问题是我需要以某种方式将每个字符转换为整数,或者以某种方式能够计算出如何 通常每个数字都会出现......我希望这可能会起作用,但它根本不起作用:
我忘了说我是编程初学者,所以如果您能给我一些提示和解释,我将不胜感激。
void calc_occurrences(int s[], int occurrences[])
{
int i = 0;
int j;
int count = 0;
while (s[i] != '\0') {
if (isdigit(s[i])) {
for (j = 0; occurrences[j] != '\0'; j++) {
occurrences[j] = s[i];
}
}
i++;
for (j = i + 1; s[j] != '\0'; j++) {
if (isdigit(s[i]) == isdigit(s[j])) {
count++;
occurrences[j] = 0;
}
}
if(occurrences[i] != 0) {
occurrences[i] = count;
}
}
}
【问题讨论】:
-
“此时我无法编写任何可行的代码”好吧,发布您拥有的任何内容......然后我们可以帮助您修复它
-
如果您想要最有效的解决方案,请考虑使用称为 map 的数据结构,它本质上保存键值对。虽然它可能非常低效,但您可能希望从使用数组来映射您的事件开始。
-
@ionizer A map 不是 C 中的标准类型,就像在 C++ 中一样
-
我并不是说要使用库或其他任何东西,只是说数据结构。
标签: c string loops frequency digits