33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<io.h>
#include<time.h>
long FileLength(FILE * handle) //获取文件长度
{
long len=filelength(fileno(handle));
return len;
}
long * order(int n,long *Ran)
{
int a=n;
int i,j;
long maxno;
for(i=0;i<a;i++)
for(j=0;j<a-i-1;j++)
if(*(Ran+j)>*(Ran+j+1))
{
maxno=*(Ran+j+1);
*(Ran+j+1)=*(Ran+j);
*(Ran+j)=maxno;
}
return Ran;
} //冒泡排序
long* RandomNumber(int n,long len) //生成随机数,并将随机数排序
{
int i;
long *Ran=(long*)malloc(sizeof(long)*n);
srand((unsigned)time(NULL));
printf("生成的随机数为:\n");
for(i=0;i<n;i++)
{
*(Ran+i)=rand()%len;
printf("%ld\n",*(Ran+i));
}
Ran=order(n,Ran);
return Ran;
}
int main()
{
FILE * handle; //handle:指向打开的文件的指针
handle = fopen("./1.txt", "r"); //打开文件并获取文件长度
long len=FileLength(handle);
char c=fgetc(handle);
while(c!=EOF) //当文件结束时
{
printf("%c",c);
c=fgetc(handle);
}
printf("\n文件长度的位数:%ld\n",len);
fclose(handle);
ifstream fin("1.txt"); //打开文件
ofstream fout("1.txt",ios::in);
if(!fin)
{
printf("1 error.\n");
abort();
}
if(!fout)
{
printf("1 error.\n");
abort();
}
char str[100];
printf("请输入想要插入的字符:");
scanf("%s",&str);
int n;
printf("请输入想要插入字符的次数:");
scanf("%d",&n);
long * Ran;
Ran=RandomNumber(n,len);
cout<<endl;
printf("排好序的随机数为:\n");
for(int i=0;i<n;i++)
{
cout<<*(Ran+i)<<endl;
}
char ch;
int k=0,l;
long m=0;
while(m<len) //当文件结束时循环结束
{
if(m==len/2)
{
fflush(stdin);
clearerr(stdin);
}
fin.get(ch);
fout.put(ch);
printf("%c",ch);
if(long(ch)<0) //判断文件当前位置是否为汉字
{
fin.get(ch);
fout.put(ch);
printf("%c",ch);
while((*(Ran+k)==m||*(Ran+k)==(m+1))&&k<n) //在与随机数匹配的位置插入字符串
{
for(l=0;l < strlen(str);l++)
fout.put(str[l]);
printf("%s",str);
k++;
}
m+=2;
}
else
{
while(*(Ran+k)==m&&k<n) //在与随机数匹配的位置插入字符串
{
for(l=0;l<strlen(str);l++)
fout.put(str[l]);
printf("%s",str);
k++;
}
m+=1;
}
}
fin.close(); //关闭文件
fout.close();
return 0;
}