gpt4 book ai didi

c - 大输入数频程序

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:19 24 4
gpt4 key购买 nike

我编写了以下程序来找出每个数字在字符数组中出现的次数。

int main(){

char s[2000],count,j=0;
fgets(s,2000,stdin);
for(int i=0;i<=9;i++)
{
count=0;j=0;
while(*(s+j))
{
if(isdigit(*(s+j)))
{
if(i==(*(s+j)-'0'))
count++;
}
j++;
}
printf("%d ",count);
}
return 0;
}

但它不适用于大量输入。

b3n47b5xf13qlx233rg4u2c949i623e34nt5661se06b675utbpy258wz633855846l761d61x340h1vn19w191sj18v2u333556bh6m5uc4u050am05p961dhmpu6iq4667zg9 

预期的输出是

5 10 5 12 8 11 15 4 4 6 

但是我得到的输出是

5 10 5 12 7 11 13 3 4 5 

谁能帮我找出我哪里出错了?

最佳答案

除了DYZ的回答,你的逻辑也很复杂。您不需要同时测试 if(isdigit(*(s+j)))if(i==(*(s+j)-'0')),你只需要重构你的代码并提供一个单一的测试并使用一个频率数组。

(一个包含 10 个元素的简单数组,初始化为全零,当找到该数字时,您会增加对应于每个数字的索引,从而导致完成后该数字的计数出现在相应的索引处)

#include <stdio.h>
#include <ctype.h>

#define MAXC 2048 /* if you need a constant, #define one (or more) */
#define NDIGIT 10

int main (void) {

char s[MAXC] = "";
size_t digits[NDIGIT] = {0}; /* declare a 'frequency array' */

while (fgets (s, MAXC, stdin)) { /* read all blocks of data */
char *p = s; /* pointer to s */
while (*p) { /* for each char in s */
if (isdigit (*p)) /* Am I a digit? */
digits[*p - '0']++; /* increment value at index */
p++; /* increment pointer */
}
}

for (int i = 0; i < NDIGIT; i++)
printf (" %zu", digits[i]);
putchar ('\n');

return 0;
}

或者没有ctype.h,

#include <stdio.h>

#define MAXC 2048 /* if you need a constant, #define one (or more) */
#define NDIGIT 10

int main (void) {

char s[MAXC] = "";
size_t digits[NDIGIT] = {0}; /* declare a 'frequency array' */

while (fgets (s, MAXC, stdin)) { /* read all blocks of data */
char *p = s; /* pointer to s */
while (*p) { /* for each char in s */
if ('0' <= *p && *p <= '9') /* Am I a digit? */
digits[*p - '0']++; /* increment value at index */
p++; /* increment pointer */
}
}

for (int i = 0; i < NDIGIT; i++)
printf (" %zu", digits[i]);
putchar ('\n');

return 0;
}

示例使用/输出

在这两种情况下,您输入的输出都是:

 5 10 5 12 8 11 15 4 4 6

检查一下,如果您还有其他问题,请告诉我。

关于c - 大输入数频程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51681553/

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