回复 17楼 pangding
如果真要支持中文,开个更大的数组也不是不可行,并且如果用cp936这样以前导字节确定的编码就不太可能了。

My life is brilliant

2012-08-28 22:59

2012-08-28 23:02

2012-08-28 23:16

2012-08-28 23:24
2012-08-28 23:30
2012-08-29 08:40
2012-08-29 11:21
程序代码:#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 15 //str1可输入大小
#define M 15 //str2可输入大小
void search_buffer(char *str,char *buffer,char * &p)
{
char *t=NULL;
while (*str)
{
for (t=buffer;t<p;t++)
{
if (*t==*str)
{
if (*str&0x80)
{
if (*(t+1)==*(str+1))
break;
}
else
break;
}
}
if (t==p)
{
*p++=*str;
if (*str&0x80)
*p++=*(str+1);
}
if (*str&0x80)
str++;
str++;
}
return;
}
void and_buffer(char* str1,char* str2, char* buffer)
{
char* p = buffer;
search_buffer(str1,buffer,p);
search_buffer(str2,buffer,p);
*p = '\0';
return;
}
int main(void)
{
char str1[N];
char str2[M+N];
printf("请输入两个字符串,我将为其做并集处理:\n");
char s[10];
int i=0;
sprintf(s,"%%%ds",N);
scanf(s,str1);
for (i=0;i<N;*(str1+i)&0x80?i+=2:i++); //中文对齐
if ((*(str1+N-1)&0x80)&&(i==N+1)) //如果字符串最末尾只有中文高位,则删掉
*(str1+i-2)='\0';
fflush(stdin);
sprintf(s,"%%%ds",M);
scanf(s,str2+N);
for (i=0;i<M;*(str2+N+i)&0x80?i+=2:i++);//中文对齐
if ((*(str2+N+M-1)&0x80)&&(i==M+1)) //如果字符串最末尾只有中文高位,则删掉
*(str2+N+i-2)='\0';
printf("%s\n%s\n",str1,str2+N);
and_buffer(str1,str2+N,str2);
printf("并集结果:\n%s\n",str2);
return 0;
}验证了我27楼的想法,没有问题。而且可以做中文处理..
2012-08-29 12:50

2012-08-29 13:27

2012-08-29 13:31