Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 控制台程序读取文本文件行,做Levenshtein并输出文本文件_C++ - Fatal编程技术网

C++ 控制台程序读取文本文件行,做Levenshtein并输出文本文件

C++ 控制台程序读取文本文件行,做Levenshtein并输出文本文件,c++,C++,我有一个庞大的字符串文本文件,按行长降序排列。我想将整个内容加载到一个字符串数组中,对每个数组执行Levenshtein,创建一个组UUID并将其放入一个数组中。因此,第二个数组将是一个哈希表,其中键是前一个字符串的内存地址,值是UUID 我希望在遍历字符串时执行指针算术,以获得最佳性能 在反复执行levenshtein ga无数次之后,我想填充另一个文本文件,其内容仅为组的UUID、冒号和原始文本文件中的行 我有维基百科上的levenshtein算法: template<class T&

我有一个庞大的字符串文本文件,按行长降序排列。我想将整个内容加载到一个字符串数组中,对每个数组执行Levenshtein,创建一个组UUID并将其放入一个数组中。因此,第二个数组将是一个哈希表,其中键是前一个字符串的内存地址,值是UUID

我希望在遍历字符串时执行指针算术,以获得最佳性能

在反复执行levenshtein ga无数次之后,我想填充另一个文本文件,其内容仅为组的UUID、冒号和原始文本文件中的行

我有维基百科上的levenshtein算法:

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];
}
模板无符号整数levenshtein_距离(常数T&s1,常数T&s2){
常量size_t len1=s1.size(),len2=s2.size();
向量col(len2+1),prevCol(len2+1);
for(无符号整数i=0;i
我已经做了一些C++,一些C,加载了Obj-C。我使用Windows 7。你建议我怎么做?什么样的字符串数组?如何将文本文件中的文本字符串转换为提供的函数所使用的文本字符串

我基本上在寻找尽可能多的技巧,因为字符串在C++中让我困惑。哦,C++也一样!p>
感谢

绝对的访问时间,您将很难完成对内存的完全读取,然后通过单次传递对其进行索引,构建指针列表并在遇到的每个CR/LF处硬写空终止符。行号将是存储所有指针的容器的索引,为此,我可能会使用
std::deque


boost::伙计们可能会更进一步,但对于快速访问来说,很难击败一大堆内存和大量索引它的指针。当然,这整件事都假设你可以把它放入内存。如果你不能,这会变得非常复杂,但是如果你可以(并且可以假设你总是可以)malloc/walk-and-terminate/push-ptr-into-deque看起来相当干净。为了真正让它冒烟,我还将用指针存储每个字符串的长度,这样您的
std::deque
将是
struct{char*ptr;size\t len;}
。这样做将消除大量不必要的strlen()等。它还可以消除空终止任何内容的需要。

您能告诉我您的目标是什么吗?是否确实要计算原始文件中所有字符串组合的Levenshtein距离?以后你想如何使用计算的距离?我的印象是你并不真正知道你想做什么。你不能“对每一个都执行Levenshtein”,因为那没有意义。Levenshtein距离是一对字符串的属性。哦,对不起,我错过了一条重要信息。我想在一个定义为常数的分数水平上对每一个进行比较。对不起,我正在尝试组合类似的字符串。这太棒了。你们的小时工资是多少?你有Skype和PayPal吗?kristan66@hotmail.com谢谢你的帮助。如果你真的喜欢,请随意投票;Re:按小时收费,我已经有三个人的工作要做了,但只要有可能,我都会尽力帮忙。再一次,我很高兴它有用。哦,还有很棒的用户名,顺便说一句。