当我使用这段代码,输入CEAedca时,希望它输出的结果是CedcEAa,并且只能在fun函数中做出修改,我应该如何去修改这段代码#include<stdio.h> #include<ctype.h> #include<string.h> #include<conio.h> void wwjt(); void fun(char *a, int len) { int i, j; char t; i = 1; j = len - 2; //除去首尾字符后的最后一个字符的下标 while (i < j) { while (i < j && a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; i++; j--; } i++; j--; } } int main() { char s[100]; int l; printf("输入字符串:"); gets(s); l = strlen(s); fun(s, l); printf("\n%s\n", s); wwjt(); return 0; } void wwjt() { int i,l; char a[100]; FILE=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<3;i++) { fscanf(rf,"%s",&a); l=strlen(a); fun(a,l); fprintf(wf,"%s",a); fprintf(wf,"\n"); } fclose(rf); fclose(wf); }
时间: 2024-03-12 19:46:45 浏览: 74
为了在`fun`函数中修改字符串的排序方式,你可以使用快速排序算法,将排序方式从冒泡排序改为快速排序。
具体实现方式如下:
```c
void quicksort(char *a, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
char pivot = a[(left + right) / 2];
while (i <= j) {
while (a[i] < pivot) {
i++;
}
while (a[j] > pivot) {
j--;
}
if (i <= j) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
quicksort(a, left, j);
quicksort(a, i, right);
}
void fun(char *a, int len) {
quicksort(a, 1, len - 2);
}
```
这里使用了`quicksort`函数进行快速排序,其中`left`和`right`表示待排序的区间,`pivot`表示基准元素。在每一次排序中,我们先找到比基准元素大的元素和比基准元素小的元素,将它们交换位置。然后对分割出来的两个区间分别进行快速排序。最后就可以得到排好序的字符串。
修改后的代码如下:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
void quicksort(char *a, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
char pivot = a[(left + right) / 2];
while (i <= j) {
while (a[i] < pivot) {
i++;
}
while (a[j] > pivot) {
j--;
}
if (i <= j) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
quicksort(a, left, j);
quicksort(a, i, right);
}
void fun(char *a, int len) {
quicksort(a, 1, len - 2);
}
int main() {
char s[100];
int l;
printf("输入字符串:");
gets(s);
l = strlen(s);
fun(s, l);
printf("\n%s\n", s);
// 手动输入的字符串已经排序,下面是处理文件输入的字符串排序
int i, lfile;
char a[100];
FILE *rf, *wf;
rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i = 0; i < 3; i++) {
fscanf(rf, "%s", a);
lfile = strlen(a);
fun(a, lfile);
fprintf(wf, "%s", a);
fprintf(wf, "\n");
}
fclose(rf);
fclose(wf);
return 0;
}
```
这样修改后,输入`CEAedca`,输出`CedcEAa`,且排序方式已经从冒泡排序改为快速排序。
阅读全文