回复 17楼 pangding
如果真要支持中文,开个更大的数组也不是不可行,并且如果用cp936这样以前导字节确定的编码就不太可能了。
My life is brilliant
#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楼的想法,没有问题。而且可以做中文处理..