Kenmark进来看下 :)

lockhall 2007-07-18 03:18:15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
unsigned char *s = (unsigned char *)"dgsd gjbsbdks dsjkbkkkkbka631413",*p =s;
int i = 0,min = 99999;
int dic[256];
for (i = 0;i<256;++i)
dic[i] = -1;
while (*p != '\0')
{
switch (dic[*p])
{
case -1:dic[*p] = i;break;
case -2:break;
default:dic[*p] = -2;break;
}
++i;++p;
}
for (i = 0; i<256;++i)
{
if (dic[i] >= 0)
if (min > i)
min = i;
}
printf("%c",s[min]);
system ("PAUSE");
return 0;
}



实在没看懂这程序在干什么 :)
...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2007-07-18
  • 打赏
  • 举报
回复
Kenmark 上次服务周到... 》——《
juicee 2007-07-18
  • 打赏
  • 举报
回复
- -
lockhall 2007-07-18
  • 打赏
  • 举报
回复
想明白了~

:)

多谢Kenmark & jixingzhong

我啃 2007-07-18
  • 打赏
  • 举报
回复
虫子的也没快多少,反复find不会好过的吧~
我啃 2007-07-18
  • 打赏
  • 举报
回复
*p是一个unsigned char是一个0~255的数值,当然可以~
我啃 2007-07-18
  • 打赏
  • 举报
回复
不过 ...
lockhall 2007-07-18
  • 打赏
  • 举报
回复
dic[*p] 这个*p怎么能充当数组下标的?

jixingzhong 2007-07-18
  • 打赏
  • 举报
回复
做了n个标记 ...

256 是字典长度,或者说是 字符集大小,【就是这个字符串中不同的字符不超过256个】

不过 ...
我啃 2007-07-18
  • 打赏
  • 举报
回复
嘘嘘这种代码不是我写的,大家不要认为是我写的~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
unsigned char *s = (unsigned char *)"dgsd gjbsbdks dsjkbkkkkbka631413",*p =s;//源字符串和一个运动指针,用unsigned 因为字典要索引要正数
int i = 0,min = 99999;
int dic[256];// 字典
for (i = 0;i<256;++i) //给初值-1就是没有出现过
dic[i] = -1;
while (*p != '\0') // 循环整个字符串
{
switch (dic[*p]) //查询这个字符对应的字典内容
{
case -1:dic[*p] = i;break;//如果以前没有出现过就记录其第一次出现的点
case -2:break;//出现过多次,放弃
default:dic[*p] = -2;break;//否则,说明以前出现过,设置为-2出现多次
}
++i;++p;//两个指针迭代加
}
for (i = 0; i<256;++i)//完成了字符串分析,最后是字典分析
{
if (dic[i] >= 0)//如果>=0说明只出现一次
if (min > i)//如果比当前记录的那个第一个仅出现一次的还前面就记录下来
min = i;
}
printf("%c",s[min]);//输出最前出现的仅出现一次的那个字符
system ("PAUSE");
return 0;
}
。。。哪个家伙写的那么菜的代码

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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