2016-11-05 2 views
0

Ich bin eine Spalte von Strings in einer Textdatei gegeben und ich muss sie miteinander vergleichen - ich möchte die erste Zeichenfolge mit allen darunter vergleichen, dann zurück zum zweiten und vergleichen Sie es mit allen darunter und so weiter. Das Problem ist, ich habe keine Ahnung, wie man den Code dafür schreibtVergleiche Strings aus Datei

+0

Sie sollten einige Forschung vor dem Posten der Frage hier tun. Es gibt viele Tutorials im Internet, Sie sollten nur nach 'C++ lesen Textdatei 'suchen: http: //www.cplusplus.com/doc/tutorial/files/ und Sie sollten die Zeichenfolge mit' strcmp' in einer Schleife – Bhoke

+0

vergleichen Ich habe diese gelesen, die Sache ist - sobald ich die erste Zeichenkette mit allen anderen verglichen habe, wie komme ich zurück zur zweiten, wie bekomme ich den Zeiger dorthin, ich sollte suchp() oder seekg() aber das verwenden ist ziemlich viel, wo ich stecken bleibe – unfi

+0

Sie müssen mit etwas zuerst beginnen. **Dann komm her. –

Antwort

1

Die Verwendung einer geschachtelten Schleife tut, was Sie erwarten;

#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; 
} 
0

DIE einfachste Weg, es zu tun cmd Linux wie ein grep verwendet:

// 1 Weg

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

// 2-Wege

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

Sie mustn 't vergessen die flagge bedeuten:

-w, --word-regexp Wählen Sie nur die Zeilen aus, die Übereinstimmungen enthalten, die ganze Wörter bilden. Der Test besteht darin, dass der übereinstimmende Teilstring entweder am Anfang der Zeile oder vor einem Nichtwort-Bestandteilzeichen stehen muss. In ähnlicher Weise muss es entweder am Ende der Zeile oder gefolgt von einem Nichtwort-Bestandteilzeichen stehen. Wortbestandteile sind Buchstaben, Ziffern und der Unterstrich.

-v, --invert-match Invertieren Sie die Übereinstimmung, um nicht übereinstimmende Zeilen auszuwählen.

-f FILE, --file = FILE Erhalten Muster von FILE, eine pro Zeile. Wenn diese Option mehrmals verwendet wird oder mit der Option -e (--regexp) kombiniert wird, suchen Sie nach allen angegebenen Mustern. Die leere Datei enthält null Muster und entspricht daher nichts.

Verwandte Themen