【问题标题】:Counting how many times digits repeats in a number计算数字中数字重复的次数
【发布时间】:2017-09-05 05:52:20
【问题描述】:

给你一个字符串 S。计算字符串 S 中所有数字出现的次数。

输入: 第一行包含字符串 S。

输出: 对于从 0 到 9 的每个数字,打印它们在字符串 S 中出现的次数。因此,打印 10 行,每行包含 2 个空格分隔的整数。第一个整数 i 和第二个整数 i 的出现次数。请参阅示例输出以进行说明。

约束:1≤|S|≤100

我试过这样做。但我遇到了错误。

错误:数组下标不是整数。和 错误:二进制操作数无效

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    double a[100],i,k;
    int b[10]={0,1,2,3,4,5,6,7,8,9},sum[10];
    int j;
    gets(a);
    k=strlen(a);
    for(i=0; i<10; i++){
        sum[i]=0;
    }
    for(i=0; i<k; i++){
        a[i]=a/(pow(10,k-i-1));
        for(j=0; j<k; j++){
            if(i+j<10 && a[i]==a[i+j])
               sum[i]++;
            else
                break;
        }
    }
    printf("%d/n",b[i]);
    puts(sum[i]);
    return 0;
}

请帮忙。

【问题讨论】:

标签: c arrays string


【解决方案1】:

您在代码中犯了一些错误。就像使用gets/puts 进行数组输入输出一样,这些方法仅适用于字符串(即char[])。为了找到数字的出现,您可以简单地维护一个数组并继续使用所需的偏移量增加位置(可以通过用'0' 字符减去字符来找到。请参见下面的代码:

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    char a[100];
    int b[10]={0,1,2,3,4,5,6,7,8,9},sum[10];
    int j, i, k;
    fgets(a, 100, stdin);
    k=strlen(a);
    a[k-1] = '\0'; // trim the last newline
    k--;

    for(i=0; i<10; i++)
        sum[i]=0;
    for(i=0; i<k; i++){
        int offset = a[i] - '0';
        sum[offset]++;
    }
    for(int i = 0; i < 10; i++) 
        printf("%d : %d\n", i, sum[i]);
    return 0;
} 

运行此代码得到以下输出:

~/Documents/src : $ gcc testArrSub.c 
~/Documents/src : $ ./a.out 
12344567889005532
0 : 2
1 : 1
2 : 2
3 : 2
4 : 2
5 : 3
6 : 1
7 : 1
8 : 2
9 : 1

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2012-05-31
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多