void OddFilter(char a[], int size) {
int b[1000];//用于每个字符出现的次数
for (int i = 0; i < size; i++) {
int sum = 0;
char p = a[i];
for (int j = 0; j < size; j++) {
if (p == a[j]) { ++sum; }
}
b[i] = sum;
}
char location[1000] = {'\0'};//用于储存字符
int x = 0;
for (int i = 0; i < size; i++) {
if (b[i] % 2 != 0) { //如果是奇数
location[x] = a[i];//将A中对应字符储存进location
x++;
}
}//出现奇数次的储存进location
for (int i = 0; i < x-1; i++) {
for (int q = 0; q >= x - i-1; x++) {
if (location[q + 1] < location[q]) {
char temp = location[q];
location[q] = location[q + 1];
location[q + 1] = temp;
}
}
}//排序
for (int i = 0; location[i+1] != '\0'; i++) {
if (location[i] == location[i + 1]) {
location[i + 1] = location[i + 2];
}
}//去重
int l = strlen(location);
cout << location[0];
for (int i = 1; i < l; i++) {
cout << " " << location[i];
}
}
##刚开始学,感谢帮助!
该回答引用ChatGPT
代码如下
修改后的代码将字符出现次数的数组b改成了大小为128的数组,因为ascii码表中的字符一共有128个,可以通过字符的ascii码作为下标直接记录每个字符出现的次数。在统计完每个字符的出现次数后,将出现奇数次的字符储存在location数组中,然后调用C++标准库中的sort函数进行排序。最后,通过另一个数组result实现去重并输出结果。
void OddFilter(char a[], int size) {
int b[128] = {0}; // 记录每个字符出现的次数
for (int i = 0; i < size; i++) {
b[a[i]]++;
}
char location[128] = {0}; // 用于储存字符
int x = 0;
for (int i = 0; i < 128; i++) {
if (b[i] % 2 != 0) {
location[x] = (char)i; // 将出现奇数次的字符储存在location中
x++;
}
}
sort(location, location+x); // 排序
char result[128] = {0};
int len = 0;
for (int i = 0; i < x; i++) {
if (i == 0 || location[i] != location[i-1]) {
result[len] = location[i]; // 去重
len++;
}
}
cout << result;
}