在字符串中查找数字(0-9)的频率

潮汐23

我在 C 中查找字符数组中数字频率的代码没有给出所需的输出。

int main() {
    int n;
    scanf("%d",&n);
    char str[n];
    int f[10],i,j,ns;
    gets(str);
    for(i=0;i<10;i++)
    {
        f[i]=0;
        for(j=0;j<strlen(str);j++)
        {
            ns=str[j]-'0';
            if(i==ns)
                f[i]+=1;
        }
    }
    for(i=0;i<10;i++)
        printf("%d ",f[i]);
    return 0;
}

如果我输入字符串

1wjhue73b38409598

我得到(0-9)的频率输出:

1 0 0 2 1 1 0 1 2 2 

而不是“1”的频率1。我哪里错了?

灌木丛

这就是scanfgets/混合时发生的情况fgets

呼叫到scanf正在等待一个号码。当您输入“1wjhue73b38409598”作为输入时,它会读取字符串开头的 1,并在看到“w”时停止读取。所以n设置为1。

然后gets立即读取剩余的字符(即“wjhue73b38409598”)而不提示。由于 1 不是此字符串的一部分,因此不会被计算在内。

然而,还有另一个问题。因为n设置为1,str只能容纳1个字符。所以gets调用写入超过缓冲区的末尾。这会调用未定义的行为在这种特殊情况下,事情似乎可以正常工作,但是对代码的微小更改可能会改变未定义行为的表现方式。

即使您要输入适当的值,n例如 50,scanf调用也会在缓冲区中留下一个换行符。随后对getsthen 的调用立即读取换行符并停止,因此所有计数器均为 0。

改用固定大小的缓冲区并使用fgets,它可以被赋予最大读取大小,以读取字符串:

char str[50];
fgets(str, sizeof(str), stdin);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在字符串中查找值的频率

计算字符串中数字的频率

将字符串0到9中的数字替换为SQL中的空白

在一组字符串中查找子字符串的频率

删除字符串中的所有内容(除外)。和数字通过0-9-Java

从字符串中仅提取0-9个数字

字符串中出现频率最高的数字的频率

字符串中字符的最大频率

从R中的字符串中提取加号(+),减号(-)和句点(。)字符以及所有数字[0-9]

查找给定字符串中使用的字符的最大频率

带最低频率字符的字符串查找算法

在Javascript中查找重复字符串的最后一个索引和字符的相对频率

字符串数组中字符串的计数频率

字符串中单词的出现频率

字符串中每个单词的频率

字符串字符频率

计算字符串C ++中'0'-'9'的出现次数

如何查找文件中包含的字符串出现的频率?

Java:字符串中出现频率最高的数字

将字符串中的字母更改为频率的字母和数字-python

Python-在文本文件中查找字符串列表的字符串频率

Perl regex \ d +和[0-9]运算符仅在字母数字字符串中显示一位数字

计算字符串频率

计算字符串中的字符的频率(Java中,绩效)

jQuery选择器将某些字符串和数字从0改为9之后呢?

我需要写一个只包含 0 到 9 数字的字符串

在 Python 中查找特定字符串之前的 9 个字符

Javascript:如何计算给定字符串中字符出现的频率并将它们作为数字返回?

计算字符串中的字符频率(Java)