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 上次服务周到... 》——《