我自认为比较 比较好。 //2个字符串中都出现的字符,并返回。 char *getstr(const char *str1, const char *str2) { const int MAX = 256;//char 类型最大数 char charFlag[MAX] = { 0 };//字符转换成int 当作数组下标,并记录出现数。 char returnstr[MAX] = { 0 }; int i = 0; for (const char * temp = str1; *temp != '\0'; temp++) { charFlag[*temp - '\0']++; } //检查str2是否出现charFlag[]出现的字符,如果出现,记录返回。 for (const char * temp2 = str2; *temp2 != '\0'; temp2++) { if (charFlag[*temp2 - '\0'])//说明str2的字符也在str1出现 { //检查是否已经加入返回数组里 bool isExist = false; for (int index = 0; index <= i; index++) { if (returnstr[index] == *temp2) { //已经在返回数组里 isExist = true; break; } } if (!isExist) { returnstr[i] = *temp2; i++; } } } return returnstr; }int main(int argc, _TCHAR* argv[]) { char str[] = "hello every one"; char str2[] = " good bye ,thank you."; char * str3 = NULL; str3 = getstr(str, str2); return 0; }