gpt4 book ai didi

c - 在 C 中将整个文件转换为小写的最佳方法

转载 作者:IT王子 更新时间:2023-10-29 00:52:27 26 4
gpt4 key购买 nike

我想知道是否有一个非常好的(性能)解决方案如何在 C 中将整个文件转换为小写。我使用 fgetc 将 char 转换为小写并使用 fputc 将其写入另一个临时文件。最后,我删除了原始文件并将临时文件重命名为旧的原始名称。但我认为必须有更好的解决方案。

最佳答案

这并没有真正回答问题(社区 wiki),但这是一个(过度?)优化的函数,用于将文本转换为小写:

#include <assert.h>
#include <ctype.h>
#include <stdio.h>

int fast_lowercase(FILE *in, FILE *out)
{
char buffer[65536];
size_t readlen, wrotelen;
char *p, *e;
char conversion_table[256];
int i;

for (i = 0; i < 256; i++)
conversion_table[i] = tolower(i);

for (;;) {
readlen = fread(buffer, 1, sizeof(buffer), in);
if (readlen == 0) {
if (ferror(in))
return 1;
assert(feof(in));
return 0;
}

for (p = buffer, e = buffer + readlen; p < e; p++)
*p = conversion_table[(unsigned char) *p];

wrotelen = fwrite(buffer, 1, readlen, out);
if (wrotelen != readlen)
return 1;
}
}

当然,这不是 Unicode 识别的。

我在 Intel Core 2 T5500 (1.66GHz) 上使用 GCC 4.6.0 和 i686(32 位)Linux 对此进行了基准测试。一些有趣的观察:

  • buffer 使用 malloc 而不是在堆栈上分配时,速度大约提高了 75%。
  • 使用条件表比使用转换表快大约 65%。

关于c - 在 C 中将整个文件转换为小写的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com