我猜将字符串与整数进行比较时出现问题
problem in comparing string to a integer i guess
此代码无效,数字 0 到 9 在给定字符串中重复了多少次。
这道题,来自hackerrank:
Given a string, S, consisting of alphabets and digits, find the frequency of each digit in the given string.
我在逻辑上找不到任何错误。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
char s[1000];
int count[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char temp;
scanf("%s", s);
for (int i = 0; i < 10; i++)
{
temp = i;
for (int j = 0; j < strlen(s); j++)
{
if (s[j] == i)
{
count[i] = count[i] + 1;
continue;
}
else
{
continue;
}
}
}
for (int k = 0; k < 10; k++)
{
printf("%d ", count[k]);
}
return 0;
}
您正在将一个字符与一个整数进行比较。现在,char
是一个数字类型,所以你可以这样做,但结果不是你所期望的。字符'0'
在ASCII中是48
,例如
您可以将 0
或 1
或任何其他单个数字转换为其 ASCII 表示形式,方法是将其添加到 '0'
。
至少你需要写
if (s[j] == i + '0')
否则你正在尝试比较一个像 '0'
这样可以有 ASCII 码 48
的字符和整数 0
.
但在任何情况下,for 循环都是低效的。
最好写成:
for (const char *p = s; *p; ++p)
{
if ('0' <= *p && *p <= '9') ++count[*p - '0'];
}
if (s[j] == i)
=> 这里s
定义为字符,i
定义为整数。因此,要解决此问题,您必须将整数转换为字符。 sprintf() 可以工作或简单的 +'0'。
此代码无效,数字 0 到 9 在给定字符串中重复了多少次。
这道题,来自hackerrank:
Given a string, S, consisting of alphabets and digits, find the frequency of each digit in the given string.
我在逻辑上找不到任何错误。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
char s[1000];
int count[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char temp;
scanf("%s", s);
for (int i = 0; i < 10; i++)
{
temp = i;
for (int j = 0; j < strlen(s); j++)
{
if (s[j] == i)
{
count[i] = count[i] + 1;
continue;
}
else
{
continue;
}
}
}
for (int k = 0; k < 10; k++)
{
printf("%d ", count[k]);
}
return 0;
}
您正在将一个字符与一个整数进行比较。现在,char
是一个数字类型,所以你可以这样做,但结果不是你所期望的。字符'0'
在ASCII中是48
,例如
您可以将 0
或 1
或任何其他单个数字转换为其 ASCII 表示形式,方法是将其添加到 '0'
。
至少你需要写
if (s[j] == i + '0')
否则你正在尝试比较一个像 '0'
这样可以有 ASCII 码 48
的字符和整数 0
.
但在任何情况下,for 循环都是低效的。
最好写成:
for (const char *p = s; *p; ++p)
{
if ('0' <= *p && *p <= '9') ++count[*p - '0'];
}
if (s[j] == i)
=> 这里s
定义为字符,i
定义为整数。因此,要解决此问题,您必须将整数转换为字符。 sprintf() 可以工作或简单的 +'0'。