删除重复字符排序字符串.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <stdio.h>
  2. #include <string.h>
  3. // 辅助函数:交换两个字符
  4. void swap(char *a, char *b) {
  5. char temp = *a;
  6. *a = *b;
  7. *b = temp;
  8. }
  9. // 辅助函数:快速排序
  10. void quicksort(char arr[], int low, int high) {
  11. if (low < high) {
  12. int pivot = arr[high];
  13. int i = (low - 1), j;
  14. for (j = low; j < high; j++) {
  15. if (arr[j] < pivot) {
  16. i++;
  17. swap(&arr[i], &arr[j]);
  18. }
  19. }
  20. swap(&arr[i + 1], &arr[high]);
  21. int pi = i + 1;
  22. quicksort(arr, low, pi - 1);
  23. quicksort(arr, pi + 1, high);
  24. }
  25. }
  26. int main() {
  27. char input[1000];
  28. char output[1000];
  29. // 读取输入字符串
  30. if (fgets(input, sizeof(input), stdin) == NULL) {
  31. printf("\n");
  32. return 0;
  33. }
  34. // 去掉换行符
  35. input[strcspn(input, "\n")] = 0;
  36. int len = strlen(input);
  37. if (len == 0) {
  38. printf("\n");
  39. return 0;
  40. }
  41. // 对字符串进行快速排序
  42. quicksort(input, 0, len - 1);
  43. // 删除重复字符
  44. int j = 0, i;
  45. for (i = 0; i < len; i++) {
  46. if (i == 0 || input[i] != input[i - 1]) {
  47. output[j++] = input[i];
  48. }
  49. }
  50. output[j] = '\0';
  51. // 输出结果
  52. printf("%s\n", output);
  53. return 0;
  54. }