c - 即使是 300 个字符输入,代码也无法正确运行
问题描述
这是用于查找字符串输入中数字频率的代码。它是 char 数组,就像 c 一样。但是当我尝试大输入时它正在下降。
我知道在将 char 转换为 int 时可能有问题,但我不明白究竟是什么。我知道完全解决这个问题的不同方法,但我只想知道这段代码有什么问题,因为它看起来很好伊格。
int main() {
char a[1001];
scanf("%s",a);
int arr[10];
for(int i=48;i<=57;i++){
arr[i]=0;
}
int count=0,j=0;
while(j<strlen(a)){
//printf("%c",a[j]);
if(a[j]>='0' && a[j]<='9'){
arr[a[j]]++;
}
j++;
}
//printf("\n");
for(int i=48;i<=57;i++){
printf("%d ",arr[i]);
}
//printf("\n%d",count);
return 0;
}
示例输入,例如:-->
EXPECTED OUTPUT:-->56 58 43 37 40 43 47 39 37 48
my code output:-->10 11 10 13 7 12 5 7 12 12
解决方案
您需要将保存结果的数组与数字的 ASCII 值分开 - 它们不相关。由于for(int i=48;i<=57;i++)
写入超出数组范围,因此忘记使用 ASCII 值。您可以使用简单的int arr[10] = {0};
.
同样,您可以通过执行将 ASCII 格式的数字转换为整数值a[i] - '0'
。
这意味着您的循环可以简化并简化为:
int arr[10] = {0};
int length = strlen(a);
for(int i=0; i<length; i++)
{
if(a[i]>='0' && a[i]<='9')
{
int val = a[i] - '0';
arr[val]++;
}
}
该检查a[i]>='0' && a[i]<='9'
又可以用isdigit(a[i])
ctype.h 中的 , 替换。
推荐阅读
- c# - (File.Copy) mscorlib.dll 中未处理的“System.IO.IOException”
- assembly - 打开Calc.exe的Shellcode太长太复杂,看不懂!我的第一个漏洞利用程序
- javascript - Pact:用相同的端点编写不同的交互
- java - 从文本文件中读取用户名和密码并将它们与文本字段进行比较是行不通的,即使它们完全相同
- ios - locationManager.location 返回 nil
- node.js - 更新后的 npm 问题
- pgadmin-4 - 如何在 pgadmin 4 上使用 sql 选项卡
- html - 使用边框时伪元素不是完整的容器宽度
- mysql - 价格因月份而异的房产的数据库结构
- sqlite - asci hex 到 blob sql