简要:非常多时候中奖用户并不希望让别人知道他的ID。程序中我们就将他们的账号部分设置为*号显示。
比如:王小二->王*二。
asadjsahd->a*********d。
代码:
#include<string.h>
#include<stdlib.h>
#define toStar(str,start,end) \
do{ \
for(int i=start;i<end;i++)\
{ \
str[i] = '*';\
} \
}while(0)
//GBK
const char* toStarString(const char* username)
{
int len = strlen(username);
char *starName = new char[len+1];
strcpy(starName,username);
int start = 1; //默认保留头尾字符
int end = len - 1;
unsigned char ch = starName[0]; //取头字符
//if(isalnum(ch)) {toStar(starName,3,len-3);}
if ( ch >= 0xB0 && ch <= 0xF7 ) //推断头是否为汉字
{
//继续检查下一个字符能否组织成汉字
unsigned char ch1=starName[1];
if ( ch1 >=0xA1 && ch1 <= 0xFE )
{
start = 2;
}
}
ch = starName[len-1]; //尾字符
if(ch >=0xA1 && ch <= 0xFE)
{
unsigned char ch1=starName[len-2];
if ( ch1 >= 0xB0 && ch1 <= 0xF7 )
{
end = len - 2;
}
}
if(start<=end-1) toStar(starName,start,end);
else toStar(starName,end,len);
return starName;
}
//Unicode
const wchar_t* toStarUn(const wchar_t* username)
{
int len = wcslen(username);
wchar_t *starName = new wchar_t[len+1];
wcscpy(starName,username);
if(len>2) toStar(starName,1,len-1);
else if(len == 2) toStar(starName,1,len);
return starName;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109196.html原文链接:https://javaforall.cn