我试图在给定的字符串中查找数字的频率,该字符串包含数字和字母。当我运行相同的程序时,我得到不同的结果,看起来像随机输出。问题出在哪里?
int main() {
char num[1001];
int digit[10];
int j,i;
int count;
scanf("%s",num);
for(i=48;i<=57;i++)
{
count = 0;
for(j=0; num[j] != EOF;j++)
{
if(num[j] == i)
{
count++;
}
}
printf("%d ",count);
}
return 0;
}
答案 0 :(得分:0)
您在 &
之前错过了scanf
行中的num
。正确的代码应为:
scanf("%s", &num);
扫描值时,需要提供变量的地址。那就是您让程序知道将值放在何处。 &num
指向变量num
的地址。但是,如果您只写scanf("%s",num)
,则将提供num
变量的值,您根本不需要关心它。无论如何,您都会覆盖该值。
在字符串的末尾,计算机放置一个空字符\0
,其ASCII值为0,以表示这是字符串的末尾。有点像“。”但对于计算机。因此,您进行检查,直到在for循环中找到空字符为止,例如:num[j] != '\0'
[Not EOF]
答案 1 :(得分:0)
似乎您正在尝试将char元素与整数类型进行比较。 例如:
char num[7] = {"ABC123");
if (num[3] == 1)
{
printf("True\n");
}
else
{
printf("False\n");
}
return 0;
// This will return False, even though the element at index 3 is "1".
我已经运行了您的代码,在相同的输入下,输出似乎是相同的。
编辑:
我们想将两位数的数字与char数据类型(本质上是一个字符)进行比较,即一位数字/大小写。
当我们采用数字N
并以10为模时,我们得到最后一位数字,例如:
48 % 10 = 8
要获得第一个数字,我们只需除以10,然后取商,即可:
48 / 10 = 4 (remainder 8).
基于此知识,我们可以将n-th
字符与第一个数字进行比较,并将n+1-th
字符与最后一个数字进行比较(假设我们仅比较两个数字,我们将停在{{1 }}。
提示:可以使用n+1-th
char = char - '0'
答案 2 :(得分:0)
我在这里没有看到任何问题,看来输出无法正确读取 因此请尝试正确打印
!**/ProjectToExclude.csproj
,以便您可以阅读多少个数字。如果您发现错误的频率, 发布您输入错误的输入。