#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int first(unsigned char ch)
{
if(ch>=0xb0&&ch<=0xf7)
return 1;
else
return 0;
}
int second(unsigned char ch)
{
if(ch>=0xa1&&ch<=0xfe)
return 1;
else
return 0;
}
int check(const char* p)
{
int i=0;
int len = strlen(p)-1;
for(i=0;i<len;i++)
if(first(p[i])&&second(p[i+1]))
return 1;
return 0;
}
bool ChooseChinese(const char *str,char *des)
{
int i=0;
int j = 0;
bool ishave = false;
int len = strlen(str)-1;
for(i=0;i<len;i++)
{
if(first(str[i])&&second(str[i+1]))
{
des[j] = str[i];
j++;
des[j] = str[i+1];
j++;
ishave = true;
}
}
des[j] = '\0';
return ishave;
}
bool ChooseDigit(const char *str,char *des)
{
int i = 0;
int j = 0;
bool ishave = false;
int len = strlen(str);
for(i = 0;i<len;i++)
{
if(str[i]<='9'&&str[i]>='0')
{
ishave = true;
des[j++] = str[i];
}
}
des[j] = '\0';
return ishave;
}
bool ChooseEnglish(const char *str,char *des)
{
int i = 0;
int j = 0;
bool ishave = false;
int len = strlen(str);
for(i = 0;i<len;i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
ishave = true;
des[j++] = str[i];
}
}
des[j] = '\0';
return ishave;
}
void main()
{
const char* str= "sdfd中ds12123dfs年f好998998";
char mystr1[100];
char mystr2[100];
char mystr3[100];
check(str)?puts("there has character!"):puts("there has none character!");
ChooseChinese(str,mystr1);
printf("\nstring_chinese = %s\n",mystr1);
ChooseDigit(str,mystr2);
printf("\nstring_digit = %s\n",mystr2);
ChooseEnglish(str,mystr3);
printf("\nstring_English = %s\n",mystr3);
}
汉字是双字节的编码格式;
汉字的第一字节:是从0xB0
汉字的第二字节:是从0xA1