int readaline_and_out(FILE *fin, FILE *fout)
{
int ch, count = 0;
char buf[1024] = {0,};
char result[1024] = {0,};
do {
if ((ch = fgetc(fin)) == EOF) {
if (!count)
return 1;
else {
buf[count] = 0x0a;
// fputc(0x0a, fout);
break;
}
}
buf[count] = ch;
// fputc(ch, fout);
count++;
} while (ch != 0x0a);
reverseArray(buf, result, count-1);
fputs(result, fout);
return 0;
}
void reverseArray(char * src, char * dest, int size)
{
int i = 0;
int j = size - 1;
for(i=0; i<size; i++) {
dest[i] = src[j];
j--;
}
dest[size] = 0x0a;
}
위 함수가 배열에 문자열 삽입 (주석친 fputc로 char당 접근하는 방법 대신 배열에 line단위로 바로삽입)
밑 함수가 저장된 문자열을 reverse하는 함수인데요.
메인에는 이 함수들에 대한 수행시간을 측정하는 코드가 있습니다.
fputc에서 배열방식으로 바꾼후 실행해보니 수행시간이 120ms -> 100ms로 줄긴 했는데, 두자리수 진입시키고 싶어요.
fgets를 사용하는 방법 외에 어떤 방법을 사용해야 좀더 수행시간이 빨라질 수 있을까요? 추가해야한다거나. 하는 내용 있으면 좀 알려주세요..ㅠ.ㅠ
나같으면 리버스 지우고 버퍼에서 바로 putc로 while(--count)문 만들어줘서 내보낼듯
글고 ch 왜 int임 형변환 일어나는 시간도 걸릴꺼 같고
버퍼에 넣을때도 ch을 거치는게 아니라 버퍼에 바로 fgetc을 한다음에 들어온값에 대해 판별해줘도 충분할듯
오 감사합니다 시도해볼게요!