如何在 C 中将整数与字符串中的字符进行比较?
How do I compare an integer with a character in a string in C?
我想将字符串中的整数与整数 (0-9) 进行比较,我写了这个 -
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char num[100];
int count = 0;
scanf("%s", num);
int len = strlen(num);
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j <= len; j++)
{
if (i == (num[j] - '0'))
{
count++;
}
}
printf("%d ", count);
count = 0;
}
return 0;
}
这没有问题(在大多数情况下有效,但在少数情况下会失败)。那么,您能给我替代方案和最佳方案吗?
提前致谢
完整图片 -
根本原因不在字符比较中,而是在分配不足的缓冲区中:
char num[100];
赋值约束为:
1 <= len(num) <= 1000
增加缓冲区大小后,所有测试都通过了。
除了输入缓冲区太小(即 100 而不是 1001)之外,我认为您的方法太复杂了。
我建议使用一个数组来计算频率,而不是嵌套循环,即一个包含 10 个元素的数组,以便每个数字都有一个计数器。
int main() {
char num[1001]; // 1000 chars + 1 zero termination
int count[10] = {0}; // Array of 10 zero initialized counters, one for each digit
scanf("%1000s", num); // At max accept 1000 chars input
char* p = num;
while (*p)
{
if (isdigit(*p) ++count[*p - '0'];
++p;
}
for (int i = 0; i < 10; ++i) printf("%d ", count[i]);
puts("");
return 0;
}
如果您不想使用 isdigit
,您可以改为:
if (*p >= '0' && *p <= '9') ++count[*p - '0'];
我想将字符串中的整数与整数 (0-9) 进行比较,我写了这个 -
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char num[100];
int count = 0;
scanf("%s", num);
int len = strlen(num);
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j <= len; j++)
{
if (i == (num[j] - '0'))
{
count++;
}
}
printf("%d ", count);
count = 0;
}
return 0;
}
这没有问题(在大多数情况下有效,但在少数情况下会失败)。那么,您能给我替代方案和最佳方案吗? 提前致谢
完整图片 -
根本原因不在字符比较中,而是在分配不足的缓冲区中:
char num[100];
赋值约束为:
1 <= len(num) <= 1000
增加缓冲区大小后,所有测试都通过了。
除了输入缓冲区太小(即 100 而不是 1001)之外,我认为您的方法太复杂了。
我建议使用一个数组来计算频率,而不是嵌套循环,即一个包含 10 个元素的数组,以便每个数字都有一个计数器。
int main() {
char num[1001]; // 1000 chars + 1 zero termination
int count[10] = {0}; // Array of 10 zero initialized counters, one for each digit
scanf("%1000s", num); // At max accept 1000 chars input
char* p = num;
while (*p)
{
if (isdigit(*p) ++count[*p - '0'];
++p;
}
for (int i = 0; i < 10; ++i) printf("%d ", count[i]);
puts("");
return 0;
}
如果您不想使用 isdigit
,您可以改为:
if (*p >= '0' && *p <= '9') ++count[*p - '0'];