我猜将字符串与整数进行比较的问题
Posted
技术标签:
【中文标题】我猜将字符串与整数进行比较的问题【英文标题】:problem in comparing string to a integer i guess 【发布时间】:2021-12-27 19:35:18 【问题描述】:此代码不起作用,数字 0 到 9 在给定字符串中重复了多少次。
这是问题,来自hackerrank:
给定一个由字母和数字组成的字符串 S,求给定字符串中每个数字出现的频率。
我在我的逻辑中找不到任何错误。
#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;
【问题讨论】:
您是否尝试过使用调试器跟踪执行,直到它的行为与您预期的不同? 【参考方案1】:至少你需要写
if (s[j] == i + '0')
否则,您将尝试将具有 ASCII 码 48
的字符 '0'
与整数 0
进行比较。
但无论如何,for 循环都是低效的。
最好写:
for (const char *p = s; *p; ++p)
if ('0' <= *p && *p <= '9') ++count[*p - '0'];
【讨论】:
为什么效率低?我对此知之甚少。我还在学习。 @TusharKamboj 至少因为同一个字符串被解析了 10 次。【参考方案2】:您正在将一个字符与一个整数进行比较。现在,char
是数字类型,所以你可以这样做,但结果不是你所期望的。例如,ASCII 中的字符'0'
是48
。
您可以将 0
或 1
或任何其他单个数字转换为其 ASCII 表示,方法是将其添加到 '0'
。
【讨论】:
【参考方案3】:if (s[j] == i)
=> 这里s
定义为字符,i
定义为整数。因此,要解决此问题,您必须将整数转换为字符。 sprintf() 可以工作或简单的 +'0'。
【讨论】:
其实s
是一个char数组。 s[j]
是 char
。
char
可以毫无问题地与int
进行比较(即使int
的值大于char
可以容纳的值)。比较 int
和 char
本质上没有错,只要您考虑到 ASCII 字符具有可能与您预期不同的特定整数值。
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于我猜将字符串与整数进行比较的问题的主要内容,如果未能解决你的问题,请参考以下文章