首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Kenmark进来看下 :)解决办法

2012-02-23 
Kenmark进来看下 :)#includestdio.h#includestdlib.h#includestring.hintmain(){unsignedchar*s(un

Kenmark进来看下 :)
#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;
}


实在没看懂这程序在干什么   :)


[解决办法]
嘘嘘这种代码不是我写的,大家不要认为是我写的~
#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;
}
。。。哪个家伙写的那么菜的代码
[解决办法]
做了n个标记 ...

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

不过 ...
[解决办法]
Kenmark 上次服务周到... 》——《

热点排行