(对应关系)一个看似很简单的题目,但是又是有点难度。征求大家好的想法和做法。。。。

divers 2003-09-19 04:05:03
(纯C语言编程)假如有一组数据有下面的对应关系
beige<-->F5F5DC
bisque<-->FFE4C4
black<-->000000
blanchedalmond<-->FFEBCD
blue<-->0000FF
blueviolet<-->8A2BE2
brown<-->A52A2A
现在我想通过字符串:bisque就能得到FFE4C4
输入blue可以得到0000FF的值,,
要怎么设计这个函数比较好。
不要说是if(){}这样一个一个判断处理哦。
主要的是我这里面这样的对应关系有100多组。
大家有什么比较的的看法呢?
...全文
55 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Darkay_Lee 2003-09-24
  • 打赏
  • 举报
回复
不想用hash(效率高很多O(1)),就用个列表吧。如果数量已经固定的话就用数组好了。

struct Node
{
char *name;
int value;
};

static Node nodeMap[]
{
{"abc", 1},
{"efg", 2}
}
#define DIM(array) sizeof(array)/sizeof(array[0])

int findValue(char *name)
{
int i;
for(i=0; i<DIM(nodeMap); i++)
{
if(strcmp(nodeMap[i].name, name) == 0
return nodeMap[i].value;
}
// not find
return 0;
}
// 随手写的代码,没有编译过的,笔误在所难免啊
xiao78xy 2003-09-24
  • 打赏
  • 举报
回复
定义一个结构
再声明此节构的数组,存入数据即可
kuangjingbo 2003-09-24
  • 打赏
  • 举报
回复
当然是著名的hash函数了+链表
FrankZhang123 2003-09-24
  • 打赏
  • 举报
回复
字符串可以用动态分配的指针来实现,对应关系可以用hash表,数据结构的书里面都有,不一定非要一个perfect minimal hash function,多数情况你是找不到perfect minimal hash function的,可以用hash链表或者再hash的办法实现。
peniy 2003-09-23
  • 打赏
  • 举报
回复
建立一个hash函数,当然要找到这个没有冲突的函数需要构造一个perfect minimal hash function.你可以参考相关文章。
Wolf0403 2003-09-19
  • 打赏
  • 举报
回复
struct info
{
char* name;
char code[6];
struct info* prev;
struct info* next;
};
链表处理数据,每建立一个链表,用 malloc 给 name 分配地址好了啦。
Wolf0403 2003-09-19
  • 打赏
  • 举报
回复
typedef struct _info
{
char* name;
char code[6];
struct _info* prev;
struct _info* next;
} Info;
链表处理数据好了啦。每建立一个节点都用 malloc 给 name 分配空间
divers 2003-09-19
  • 打赏
  • 举报
回复
ezhou(煮花生) :但是这样的话,第一维的长度不一样,很难确定。那样会浪费空间的。我的空间用量是有要求的,不能乱用的。我也曾经考虑过用结构呢。因为这个第一维的长度不能确定,所以,就放弃这种想法,不知道有什么比较好的做法
ttlb 2003-09-19
  • 打赏
  • 举报
回复
up
ezhou 2003-09-19
  • 打赏
  • 举报
回复
因为是纯c,觉得用一个二维数组比较方便。循环比较第一项(颜色),然后就可以得到第二项(颜色码)。

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧