c - 找出数字 5 在 0 - 4322 内出现了多少次

标签 c arrays string pointers strstr

这段代码似乎对我不起作用。它输出数字 17,这显然是错误的。如果遇到 5、15、25、50 等数字,计数器应该上升。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(void) {
    int i;
    int counter; 
    char num[4322];

    for (i = 1; i < sizeof(num); i++){
        num[i] = i;
        if ( strstr(&num[i], "5")){
            counter = counter + 1;
        }
    } 

    printf("%d", counter);
    return 0;
}

最佳答案

您没有将数字转换为字符串,而是将非空终止字符串传递给 strstr()。 您还忘记了初始化 counter

您应该一位一位地检查数字。试试这个:

#include <stdio.h>

int main(void) {
    int max = 4322;
    int target = 5;
    int i, cur, counter = 0;
    for (i = 1; i <= max; i++) {
        for (cur = i; cur > 0; cur /= 10) {
            if (cur % 10 == target) counter++;
        }
    }
    printf("%d\n", counter);
    return 0;
}

关于c - 找出数字 5 在 0 - 4322 内出现了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36756225/

相关文章:

c - -250 打印为 6

Java - 二维数组检查对角数字板

c++ - 如何让 char[] 与 std::map 一起工作

c - 没有 '\0' 字符的字符串?

c++ - 使用c + = expression和c = c + expression时输出中的std::string差异

c++ - 无法将字符串转换为 float

c - 为什么代码执行了两次?

c - 结构和指针。不清楚的输出

char 转换为 int 并计算 int 之和

php - 通过在奇数/偶数数字键上拆分数组,我做错了什么?