控制台程序读取文本文件行,做Levenstein并输出一个文本文件
Console program to read text file lines, do Levenshtein and the output a text file
我有一个庞大的字符串文本文件,按行长降序排列。我想把整个东西加载到一个字符串数组中,对每个数组执行Levenstein,创建一个组UUID并将其放入一个数组中。因此,第二个数组将是一个哈希表,其中键是前一个字符串的内存地址,值是UUID。
我希望在对字符串进行迭代时执行指针运算,以获得最佳性能。
在反复执行了无数次levenstein-ga之后,我想填充另一个文本文件,其内容只是组的UUID、冒号和原始文本文件中的行。
我有维基上的Levenstein算法:
template<class T> unsigned int levenshtein_distance(const T &s1, const T & s2) {
const size_t len1 = s1.size(), len2 = s2.size();
vector<unsigned int> col(len2+1), prevCol(len2+1);
for (unsigned int i = 0; i < prevCol.size(); i++)
prevCol[i] = i;
for (unsigned int i = 0; i < len1; i++) {
col[0] = i+1;
for (unsigned int j = 0; j < len2; j++)
col[j+1] = min( min( 1 + col[j], 1 + prevCol[1 + j]),
prevCol[j] + (s1[i]==s2[j] ? 0 : 1) );
col.swap(prevCol);
}
return prevCol[len2];
}
我已经做了一些C++,一些C,加载了Obj-C。我使用的是Windows7。你建议我怎么做?什么样的字符串数组?如何转换文本文件中的文本字符串以供所提供的函数使用?
我基本上是在寻找尽可能多的技巧,因为字符串在C++中让我感到困惑。哦,C++也一样!
感谢
对于纯粹的访问时间,您将很难完成对内存的完全读取,然后通过单次遍历对其进行索引,构建指针列表,并在遇到的每个CR/LF处硬写一个null终止符。行号将是存储所有指针的容器的索引,为此我可能会使用std::deque<>
。
提升::伙计们可能会把它做得更远,但对于快速访问来说,它很难击败一大堆内存和大量索引它的指针。当然,这整件事都假设你可以将其放入内存。如果你做不到,这会变得更加复杂,但如果你可以(并且可以假设你总是可以)malloc/walk和terminate/push-ptr进入deque似乎很干净。为了真正让它冒烟,我还会用指针存储每个字符串的长度,所以你的std::deque<>
应该是struct { char* ptr; size_t len; }
。这样做将消除大量不需要的strlen()等。它还将消除对null终止任何内容的需要。
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- C++对象数组的文件输出
- bcdedit 文件输出不起作用,但其他命令可以
- 如何从文本文件输出数据?(学生成绩单计划)
- 使用 C++文件 I/O 输出 pdf 文件
- C 文件输出垃圾
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++:具有随机名称的文件输出
- 在命令提示符下看到换行符,但在文件输出中可以看到 相同的字符串
- 生成文件不会生成预期的文件输出
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 使用函数从文件输出
- GCC.obj文件输出不具有确定性(.debug_info,PROGPITS部分)
- C cstdiofile :: Writestring给出了不正确的文件输出
- C 输出:STD :: COUT和文件输出没有相同的内容
- GCC和MSVC之间的文件输出不一致
- C++文件输出奇怪的数字,并且部分代码没有运行
- 如何将特定字符从TXT文件输出到特定点
- C 调用从TXT文件输出信息的函数
- 将交易从文本文件输出到屏幕