题目:计算两个字符串中出现的相同字符
void getSameCh(const char* str1, const char* str2)
{
static char result[128]={0};
int flag=0;
int i=0;
int k,j;
char temp;
if((str1 == NULL) || (str2 == NULL))return;
while(*(str1+i)!='\0')
{
temp=*(str1+i);
if(temp>='a')
{
k=*(str1+i)-'a';
}
else k=*(str1+i)-'A';
flag=flag | (0x00000001<<k);
i++;
}
i=0;k=0;
while(*(str2+i)!='\0')
{
temp=*(str2+i);
if(temp>='a')
{
j=*(str2+i)-'a';
}
else j=*(str2+i)-'A';
if((flag &(0x00000001<<j))!=0)result[k++]=*(str2+i);
i++;
}
result[k]='\0';
for(i=0; result[i]!='\0'; i++)
{
printf("result[%d]:%c \n",i,result[i]);
}
}
输入:getSameCh("abcdefgh","bhil");
输出:bh
算法思路:通过位标识法,共有26个字母,不分大小写,用一个int型32位flag来表示每个字母。首先遍历第一个字母,如果字母存在,则在相应的位置1,然后遍历第二个字母,查看相应的标识符,如果为1,标识字母是相同的,则保存下来。