C 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字的频率
请告诉我代码中有什么错误输出为00000000。C 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字的频率,c,frequency,digits,C,Frequency,Digits,请告诉我代码中有什么错误输出为00000000。 我知道有些错误,但找不到 #include <stdio.h> #include <string.h> int main() { int c=0; char s[100]; fgets(s, 100, stdin); printf("%s", s); for(int i=0;i<=9;i++) { for(int j=0;j<str
我知道有些错误,但找不到
#include <stdio.h>
#include <string.h>
int main()
{
int c=0;
char s[100];
fgets(s, 100, stdin);
printf("%s", s);
for(int i=0;i<=9;i++)
{
for(int j=0;j<strlen(s);j++)
{
if(s[j]==i){
c++;
}
}
printf("%d", c);
}
return 0;
}
#包括
#包括
int main()
{
int c=0;
chars[100];
fgets(s,100,stdin);
printf(“%s”,s);
对于(int i=0;i首先,您正在比较一个字符和一个int。请查看解决方案
然后,我会记得“0”是ASCII表中的索引48,而不是0:关键问题是s[j]==I
。它将字符串的char
与char
'0'
与'9'
之间的值进行比较
另一个是c
未在每个循环中重置为零
不要循环10次,而是测试char
是否为数字
您没有调用j而是在这一行中出错了“if(s[j]==i)”,并且您没有创建任何单独的数组来存储数字的频率,如果您使用单个变量进行频率计数,那么它将显示字符串频率的累计值
您可以将is代码作为参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s;
s = malloc(1024 * sizeof(char));
scanf("%s", s);
s = realloc(s, strlen(s) + 1);
int len = strlen(s), i;
int arr[10];
for(i = 0; i < 10; i++)
arr[i] = 0;
for(i = 0; i < len; i++) {
if(s[i] >= '0' && s[i] <= '9') {
arr[(int)(s[i] - '0')]++;
}
}
for(i = 0; i < 10; i++)
printf("%d ", arr[i]);
printf("\n");
free(s);
return 0;
}
#包括
#包括
#包括
int main()
{
char*s;
s=malloc(1024*sizeof(char));
scanf(“%s”,s);
s=realloc(s,strlen(s)+1;
int len=strlen(s),i;
int-arr[10];
对于(i=0;i<10;i++)
arr[i]=0;
对于(i=0;i 如果(s[i]>='0'和&s[i]循环的另一个样式选择:for(char*t=s;*t;+++t)
。然后在使用s[i]
的地方在循环体中使用*t
。我不会费心使用值48
。所有真实世界的字符集(包括标准主题字符集)将数字放在一个连续的集合中,从0
开始并递增。因此,从任何数字中减去'0'
,就会得到数字等价物('0'-'0'
->0
,'1'-'0'>1
,'9'-'0'
->9
)。这也是C标准中对兼容执行字符集的要求。
for (size_t i=0; s[i]; i++) {
for (size_t i=0; s[i] != '\0'; i++) {
for (size_t i=0; s[i] != 0; i++) {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s;
s = malloc(1024 * sizeof(char));
scanf("%s", s);
s = realloc(s, strlen(s) + 1);
int len = strlen(s), i;
int arr[10];
for(i = 0; i < 10; i++)
arr[i] = 0;
for(i = 0; i < len; i++) {
if(s[i] >= '0' && s[i] <= '9') {
arr[(int)(s[i] - '0')]++;
}
}
for(i = 0; i < 10; i++)
printf("%d ", arr[i]);
printf("\n");
free(s);
return 0;
}