修改优化这个代码#include <stdio.h> #include <stdlib.h> #include <string.h> void sort(char *c)//排序函数 { int n=strlen(c); char t; int i,j; for(i=0;i<n;i++)//用冒泡法排序 { for(j=0;j<i+1;j++) { if(c[i]>c[j]) { t=c[i]; c[j]=c[i]; c[j]=t; } } } } int main() { FILE *fpa,*fpb,*fpc; char c[1000]={0};//将字符型数组初始化 fpa=fopen("A.file","r");//打开三个文件夹 if(fpa==NULL) { printf("fpa文件打开失败!\n"); exit(0); } fpb=fopen("B.file","r"); if(fpb==NULL) { printf("fpb文件打开失败!\n"); exit(0); } fpc=fopen("C.file","W");//(写)打开C文件,输入数据 if(fpc==NULL) { printf("fpc文件打开失败!\n"); exit(0); } fgets(c,1000,fpa);//从A文件中读取数据 int len=strlen(c);//调用函数获取c的长度 fgets(c+len,1000,fpa);//从B文件中读取数据并存到a后面(都存到c里) printf("文件中的数据相连接之后的结果为:\n"); sort(c);//调用排序函数 printf("排完序后的字符串为:\n"); puts(c);//输出字符串 fputs(c,fpc);//写文件函数 fclose(fpa);//关闭文件 fclose(fpa); fclose(fpa); return 0; }
时间: 2024-01-03 20:04:24 浏览: 117
下面是修改后的代码,主要是修复了排序函数的错误:将 c[j] 赋值为 c[i] 而不是 t。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(char *c)
{
int n = strlen(c);
char t;
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < n - i - 1; j++) // 优化冒泡排序,减少比较次数
{
if(c[j] > c[j+1])
{
t = c[j];
c[j] = c[j+1];
c[j+1] = t;
}
}
}
}
int main()
{
FILE *fpa, *fpb, *fpc;
char c[2000] = {0}; // 将字符型数组初始化
fpa = fopen("A.file", "r"); // 打开三个文件夹
if(fpa == NULL)
{
printf("fpa文件打开失败!\n");
exit(0);
}
fpb = fopen("B.file", "r");
if(fpb == NULL)
{
printf("fpb文件打开失败!\n");
exit(0);
}
fpc = fopen("C.file", "w"); // (写)打开C文件,输入数据
if(fpc == NULL)
{
printf("fpc文件打开失败!\n");
exit(0);
}
fgets(c, 1000, fpa); // 从A文件中读取数据
int len = strlen(c); // 调用函数获取c的长度
fgets(c + len, 1000, fpb); // 从B文件中读取数据并存到a后面(都存到c里)
printf("文件中的数据相连接之后的结果为:\n");
sort(c); // 调用排序函数
printf("排完序后的字符串为:\n");
puts(c); // 输出字符串
fputs(c, fpc); // 写文件函数
fclose(fpa); // 关闭文件
fclose(fpb);
fclose(fpc);
return 0;
}
```
优化说明:
1. 在冒泡排序中,通过减少比较次数优化算法,避免因为多余的比较操作而降低效率。
2. 将定义数组 c 的大小改为 2000,保证可以存储两个文件的内容。
阅读全文