/*求字符串准长度函数
用来求一个即包含字母数字又包含文字的字符串的长度(一个中文字只算1个长度)
p:接收字符串
返回值:字符串的准长度*/
int Strlen(char *p)
{
int len=0;
while(*p!='')
{
len++;
(*p>0)?p++:p=p+2; //如果当前的字符的ASCII码为正(指针下移一位),为负(指针下移两位)
}
return len;
}
/*判断一个字符串是否包含另一个字符串函数(字符串中的字符即可以是字母数字又可以是文字)
用来判断一个字符串是否包含另一个字符串(即一个字符串是否是另一个字符串的子串)
a:接收长字符串 b:接收短字符串(即要判断的子串)
返回值:0:b不是a的子串 1:b是a的子串*/
int Contain(char* a,char *b)
{
int len=Strlen(b);
while(*a!='')
{
bool flag;
if(*a<0) //如果当前的字符的ASCII码为正(判断一位是否相等),为负(判断两位是否相等)
{
flag=(*a==*b&&*(a+1)==*(b+1)); //判断两位
}
else
{
flag=(*a==*b); //判断一位
}
if(flag)
{
char *p=a,*q=b,count=0;
while(*p!=''&&*q!='')
{
if(*p<0) //如果当前的字符的ASCII码为正(判断一位是否相等),为负(判断两位是否相等)
{
flag=(*p==*q&&*(p+1)==*(q+1)); //判断两位
}
else
{
flag=(*p==*q); //判断一位
}
if(flag) count++; //相等count加1
(*p>0)?p++:p=p+2; //如果当前的字符的ASCII码为正(指针下移一位),为负(指针下移两位)
(*q>0)?q++:q=q+2;
}
if(count==len) //count等于字符串b的准长度表示字符串a包含字符串b返回1
{
return 1;
}
}
(*a>0)?a++:a=a+2; //如果当前的字符的ASCII码为正(指针下移一位),为负(指针下移两位)
}
return 0;
}
/*姓名模糊查找函数(姓名或条件字符串中的字符即可以是字母数字又可以是文字)
功能说明:此函数用来判断姓名字符串与条件字符串的相似程度
(
例如:若查找条件字符串叫"李斌强",则程序将
按'李斌强'、'李斌'、'斌强'、'李'、'斌'、'强'
依次匹配,匹配一个相似程度相应增加一级,
若一个人的姓名叫"李斌强",则其相似程度为6级;
若一个人的姓名叫"李斌宾强",则其相似程度为4级;
若一个人的姓名叫"王斌强",则其相似程度为3级;
若一个人的姓名叫"李宾强",则其相似程度为2级;
若一个人的姓名叫"李bin强",则其相似程度为2级;
若一个人的姓名叫"Mr.李",则其相似程度为1级;
)
foun:接收姓名字符串 cond:接收条件字符串
返回值:相似程度(假设条件字符串有3个汉字,则最大相似程度为6级<1+2+3=6>)*/
int Namcmp(char* foun,char* cond)
{
char* p=cond;
int len=Strlen(cond);
int count=0; //记录相似程度
for(int i=0;i<len;i++) //条件字符串的准长度
{
p=cond;
for(int j=0;j<i+1;j++) //有多少个准长度相同的子串就循环多少次
{
char *s=p;
char temp[20];
char *t=temp;
for(int k=0;k<len-i;k++) //子串的准长度是多少就循环多少次
{
if(*s>0) //如果当前的字符的ASCII码为正(赋值一位),为负(赋值两位)
{
*t=*s; //赋值一位
}
else
{
*t=*s;
*(++t)=*(++s); //赋值两位
}
s++;
t++;
}
*t='';
t=new char[20];
strcpy(t,temp);
if(Contain(foun,t)) count++; //判断姓名字符串是否包含刚拆分的条件字符串的子串
delete t;
(*p>0)?p++:p=p+2; //如果当前的字符的ASCII码为正(指针下移一位),为负(指针下移两位)
}
}
return count;
}
01./*
02. string 转换为 wstring
03.*/
04.std::wstring c2w(const char *pc)
05.{
06. std::wstring val = L"";
07.
08. if(NULL == pc)
09. {
10. return val;
11. }
12. //size_t size_of_ch = strlen(pc)*sizeof(char);
13. //size_t size_of_wc = get_wchar_size(pc);
14. size_t size_of_wc;
15. size_t destlen = mbstowcs(0,pc,0);
16. if (destlen ==(size_t)(-1))
17. {
18. return val;
19. }
20. size_of_wc = destlen+1;
21. wchar_t * pw = new wchar_t[size_of_wc];
22. mbstowcs(pw,pc,size_of_wc);
23. val = pw;
24. delete pw;
25. return val;
26.}
27./*
28. wstring 转换为 string
29.*/
30.std::string w2c(const wchar_t * pw)
31.{
32. std::string val = "";
33. if(!pw)
34. {
35. return val;
36. }
37. size_t size= wcslen(pw)*sizeof(wchar_t);
38. char *pc = NULL;
39. if(!(pc = (char*)malloc(size)))
40. {
41. return val;
42. }
43. size_t destlen = wcstombs(pc,pw,size);
44. /*转换不为空时,返回值为-1。如果为空,返回值0*/
45. if (destlen ==(size_t)(0))
46. {
47. return val;
48. }
49. val = pc;
50. delete pc;
51. return val;
52.}