统计字符串中数字出现频率

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了统计字符串中数字出现频率脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

给定一个包含字母和数字的字符串,要求统计出这个字符串中从09的数字的个数。字符串仅包含英文字母与阿拉伯数字,长度1<=len(nums)<=1000
实例输入:
a11472o5t6
输出:
0 2 1 0 1 1 1 1 0 0
这里数字1出现了两次,记为2,而2 4 5 6 7各出现一次,记为1,剩下的0 3 8 9都没有出现,记为0。
c语言中,对于char类型的变量c表示的数字字符,可以通过进行运算c-'0'来得到其所对应的数字值,这是因为C中字符型的数值运算事实上被隐式转换为了int型。

int main() {
    int* nums = (int*) malloc(10 * sizeof(int));
    char c;
    
    for(int i = 0; i < 10; i++)
        *(nums+i) = 0;

    while(scanf("%c", &amp;c) == 1)
        if(c >= '0' && c <= '9')
            (*(nums+(c-'0')))++;
    
    for(int i = 0; i < 10; i++)
        PRintf("%d ", *(nums+i));
        
    free(nums);
    
    return 0;
}

通过malloc获得一个十位的全0列表,同时通过scanf来逐一获取字符串中的字符,并通过ascii码值比较判断是否为数字,,同时将对应位的数字加一。最后则是一个输出过程。当然,由于使用了malloc,所以不能忘记使用free释放这些内存空间。
另外值得一提的是由于free函数仅销毁已经不再需要的内存空间而不对指针做变化,我们剩下的指针将仍然存在直到程序结束,但却指向了垃圾内存,为了避免调用这些指针发生不必要的错误,在实际编程中我们可能需要主动将该指针指向NULL
其实这个有个malloc部分我们完全可以用数组代替。甚至有人使用数组直接一次性读入字符串的方法。

char str[1001];
scanf("%s", str);
int lut[10] = {0, };
for (int i = 0; i < strlen(str); ++i) {
    if (str[i] >= '0' && str[i] <= '9') {
        ++lut[str[i] - '0'];
    }
}
for (int i = 0; i < 10; ++i) {
    printf("%d ", lut[i]);
}

题目说明了字符串最长有1000位,这里使用str[1001],别忘了字符串最后需要一位存放来表示字符串结尾。这段代码相比前者可读性提高一点

脚本宝典总结

以上是脚本宝典为你收集整理的统计字符串中数字出现频率全部内容,希望文章能够帮你解决统计字符串中数字出现频率所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。