##刚刚和老师交流,这是道简单又不简单的面试题,问:如何把这个字符复制提高8倍?
实验目的:对于同一段字符,比较strncpy函数每次复制1个/4个字符的速度大小
方法:读取一个文件中的字符到str[N]数组中,
Mycpy函数表示 把从b开始的字符读取n个到以a开始的字符中,直到把a读完
testFunc函数计算读取b到a共MAXK次,每次m个字符所耗费的时间。(当读取时间过小时,PC无法将其打印,故循环MAXK次,再进行计算)
代码:
#include <stdio.h>
#include <string.h>
#include <time.h>
#define N 1000
#define MAXK 10000
clock_t start,stop;
double duration;
void Mycpy(char *a,char *b,int n);
void testFunc(char *a,char *b,int m);
int main()
{
char str[N];//={"1111111111111"};
char cstr[N]={};
FILE *fp = fopen("1.txt", "r");
fgets(str, N, fp);
testFunc(cstr,str,1);
testFunc(cstr,str,2);
testFunc(cstr,str,4);
testFunc(cstr,str,8);
return 0;
}
void testFunc(char *a,char *b,int m)
{
start=clock();
for(int i=0;i<MAXK;i++)
Mycpy(a,b,m);
stop=clock();
duration = ((double)(stop - start)) / CLK_TCK/MAXK;
printf("ticks%d = %f\n", m, (double)(stop - start)/MAXK);
printf("duration = %6.2e\n\n", duration);
}
void Mycpy(char *a,char *b,int n)
{
int i=0;
while(i<N)
{
strncpy(&a[i],&b[i],n);
i=i+n;
}
}
实验结果:
实验结果表示,读取文件时,当每次复制字符的个数提高n倍时,其读取整个文件的速度也会差不多提高对应的倍数!!