gpt4 book ai didi

c - 用于在字符串上进行切换的宏

转载 作者:行者123 更新时间:2023-12-04 07:57:04 24 4
gpt4 key购买 nike

除了使用散列函数之外,我想编写一些与电影信用相关项目的键/值查找的基本映射。以下宏似乎是一种可以接受的方法吗?

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

#define TOMAP(input_str, output_buf, from, to) \
if (strcmp(input_str, from) == 0) \
strcpy(output_buf, to)

void map_imdb_position(const char* pos, char output[])
{
TOMAP(pos, output, "Director", "director");
TOMAP(pos, output, "Writer", "scribe");
}

int main(void) {
char position[20];
map_imdb_position("Director", position);
printf("Director->%s\n", position);
}
如果没有,那么做某种 switch 的更好方法是什么?关于字符串比较的语句?

最佳答案

正如评论中所建议的那样,一种更简洁的方法是使用函数中的信用图,例如:

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

typedef struct map {
char from[20];
char to[20];
} Map;

void map_imdb_position(const char* credit, char output[])
{
static Map credits[] = {
{"Director", "director"},
{"Writer", "scribe"}
};
for (int i=0; i < sizeof(credits)/sizeof(*credits); i++) {
if (strcmp(credit,credits[i].from) == 0) {
strcpy(output, credits[i].to);
break;
}
}
printf("%s --> %s\n", credit, output);
}

int main(void) {
char position[20];
map_imdb_position("Director", position);
map_imdb_position("Writer", position);
}
工作示例: https://onlinegdb.com/Sk_t76aQ _

关于c - 用于在字符串上进行切换的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66649451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com