请考虑以下代码.我在问这是否正确,是否遗漏了什么.还有别的办法吗.

#include <stdio.h>
#include <string.h>
const char *getOrder (const char *day)
{
    if (strncmp(day, "Monday", 7) == 0) {
        return "first";
    } else if (strncmp(day, "Tuesday", 7) == 0) {
        return "second";
    } else if (strncmp(day, "Wednesday", 9) == 0) {
        return "third";
    } else if (strncmp(day, "Thursday", 8) == 0) {
        return "forth";
    } else if (strncmp(day, "Friday", 6) == 0) {
        return "fifth";
    } else if (strncmp(day, "Saturday", 8) == 0) {
        return "sixth";
    } else if (strncmp(day, "Sunday", 6) == 0) {
        return "seventh";
    } else
        return NULL;
}
int main()
{
    const char* str = NULL;
    str = getOrder ("Monday");
    printf("str : %s\n", str);
    return 0;
}

推荐答案

if/else梯形图过于复杂,容易出现"复制/粘贴"错误.

似乎您需要一个"查找表"将工作日名称转换为不同的字符串.

const char *getOrder (const char *day) {
    char *LUT[][2] = {
    { "Monday", "first", },
    { "Tuesday", "second", },
    { "Wednesday", "third", },
    { "Thursday", "forth", },
    { "Friday", "fifth", },
    { "Saturday", "sixth", },
    { "Sunday", "seventh", },
    };
    
    for( i = 0; i < sizeof(LUT)/sizeof(LUT[0]); i++ )
        if( strncmp(day, LUT[i][0], strlen( LUT[i][0] ) ) == 0 )
            return LUT[ i ][ 1 ];

    return "NOT A DAY NAME";
}

它仍在反复搜索...

这里有一个很小的哈希函数,可以将字符串日名称快速转换为整数值(不区分大小写).玩它.也许你会try 将其直接改为看似合理的工作日名称.

// Convert a day name (or 3 letter abbrev.) to index (1-7, Sun=1). Beware false positives!
static int wkdayOrd( char cp[] ) { return "65013427"[*cp/2 + ~cp[1] & 0x7] & 0x7; }

C++相关问答推荐

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

在C中使用JMP_buf数组进行线程化(在xv6中测试)

显式地将值转换为它从函数返回的类型的含义是什么?

当我更改编译优化时,相同的C代码以不同的方式运行

为什么STM32G474RE上没有启用RCC PLL

_泛型控制表达式涉及数组碰撞警告的L值转换错误?

函数的限制限定指针参数允许优化调用方函数吗?

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

关于scanf()和空格的问题

通过描述符查找文件路径时出现问题

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

如何使用libgpio(d)为Raspberry Pi编译C程序?

生产者消费者计数器意外输出的C代码

某些EAX值的不同调用方的CPUID结果不一致

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

不兼容的整数到指针转换传递';char';到类型';常量字符*

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?