比较文件中的字符串[关闭]

Posted

技术标签:

【中文标题】比较文件中的字符串[关闭]【英文标题】:Comparing strings from file [closed] 【发布时间】:2016-11-05 11:14:03 【问题描述】:

我在一个文本文件中得到一列字符串,我必须将它们相互比较 - 我想将第一个字符串与它下面的所有字符串进行比较,然后返回到第二个字符串并将它与它下面的所有字符串进行比较等等。问题是我不知道如何为它编写代码

【问题讨论】:

在此处发布问题之前,您应该做一些研究。网上教程很多,直接搜索C++ read text file :cplusplus.com/doc/tutorial/files 循环比较字符串和strcmp 我已经阅读了这些,问题是 - 一旦我将第一个字符串与所有其他字符串进行了比较,我如何回到第二个字符串,我如何获得那里的指针,我应该使用 seekp () 或 seekg() 但这几乎是我卡住的地方 你必须先从一些东西开始。 那么到这里来。 【参考方案1】:

使用嵌套循环可以达到您的预期;

#include <iostream>
#include <fstream>
#include <vector> //include this to use vector

using namespace std;

int main() 

    //to take input from the file
    ifstream fin;

    //to read the same strings into 2 arrays so we can loop it appropriately
    //by taking one string and comparing it to all below it.
    vector <string> line1;
    vector <string> line2;

    //to hold a line of string
    string temp;

    //replace this with with your file 
    fin.open("hello.txt");

    //to check if file cannot be opened or does not exist
    if(!fin.is_open()) 
        cout << "file could not be opened";
    

    //strings are inserted into element of these 2 vectors 
    //(Internally, vectors use a dynamically allocated array to store their elements in adjacent memory locations)
    //that is why i decided to use vectors. Also, using the push_back method
    //to insert the strings into both arrays means we don't have to specify the size of the array
    while (getline(fin, temp)) 
        line1.push_back(temp);
        line2.push_back(temp);
    


    //nested loop is used to make sure one string is used to operate 
    //on all the strings in the file and move to the next to do same
    //and so on...
    for (unsigned int i = 0; i < line1.size(); i++) 
        for (unsigned int j = 0; j < line2.size(); j++) 
            //you can compare first string with all below here however you want to do it
            //I just did this so you see how it behaves
            cout << line1[i] << " = " << line2[j] << endl;
        
    

    return 0;

【讨论】:

【参考方案2】:

最简单的方法是像 grep 一样使用 cmd linux:

// 1 路

 grep -w -v -f file1.log file.2 > mach.log

// 2 路

grep -w -f file1.log file.2 > mach.log

你不能忘记标志的意思:

-w, --word-正则表达式 仅选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须在行首,或者前面有一个非单词组成字符。 同样,它必须位于行尾或后跟非单词组成字符。构成单词的字符是字母、数字和下划线。

-v, --invert-match 反转匹配感,选择不匹配的行。

-f 文件,--file=文件 从 FILE 中获取模式,每行一个。如果此选项被多次使用或与 -e (--regexp) 选项结合使用,则搜索所有给定的模式。空文件包含零个模式,并且 因此不匹配。

【讨论】:

以上是关于比较文件中的字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何比较文本文件中的 gps 坐标以查看哪对最接近用户的当前位置 [关闭]

比较Java中的两个声音(有容差)[关闭]

批量比较两个文件名的中间部分以在它们不同时执行某些操作[关闭]

比较两个音频文件。声音匹配[关闭]

SourceTree关闭比较视图

将字符串与文件中的字符串进行比较[重复]