2017-05-04 2 views
2

Ich muss in einer TXT-Datei lesen, die Stimmen enthält, um zu bestimmen, wer eine vorgetäuschte Wahl gewinnen würde. Hier ist ein kleiner Teil der Datei, damit Sie ein Verständnis bekommen können.C++ Keine doppelten Zahlen an die Ausgabe

1YYYYYYYYYYThe New Guy 
2YNYNYNYNYNHarry Potter 
2YNNYYNNYYNHarry Potter 
2NNNNNNNNNNThe New Guy 
3NYNYNYNYNYThe New Guy 
3YYYYYYYYYYHarry Potter 
3YYYYYYYYNYHarry Potter 

Die erste Zahl ist die „ID“ Nummer und wenn sie irgendwelche Duplikate dieser Nummer, die ich eigentlich nicht bin es in die Liste der output.The Nummer lesen geht der ganzen Weg bis zu 99 mit Dubletten verstreuten in der ganzen Datei wie gezeigt. Die Nummern sind alle in Ordnung. So kann es wie gezeigt 1222333 gehen, aber kann 122332 nicht tun. Hier ist der Code, den ich bis jetzt habe, stoppt die Schleife gerade, wenn es das erste Duplikat trifft, irgendeine Hilfe würde geschätzt werden.

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <sstream> 
#include <limits> 
#include <cstdio> 
#include <string> 
int main() 
{ 
int ID; //pirate ID number 
int IDTest; 
char ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10; //vote on amendments 
std::string vote; //vote for captain 
std::ifstream fileReader; //open file for reading 
fileReader.open("BallotsHogwart.txt"); 
if (fileReader.fail()) 
{ 
    std::cout << "The ballots failed to open with code: " << fileReader.failbit; 
} 
else 
{ 
    do 
    { 
     IDTest = ID; 
     fileReader >> ID; 
     if (IDTest != ID) 
     { 
      std::cout << "Id:" << ID; 
      fileReader >> ch1; 
      fileReader >> ch2; 
      fileReader >> ch3; 
      fileReader >> ch4; 
      fileReader >> ch5; 
      fileReader >> ch6; 
      fileReader >> ch7; 
      fileReader >> ch8; 
      fileReader >> ch9; 
      fileReader >> ch10; 
      std::cout << " char 1 - 10: " << ch1 << ch2 << ch3 << ch4 << ch5 << ch6 << ch7 << ch8 << ch9 << ch10; 
      getline(fileReader,vote); 
      std::cout << " the votee: " << vote << std::endl; 
     } 
    } while(!fileReader.eof()); 
} 
fileReader.close(); 
return 0; 

}

+0

Werden Sie y Haben Sie jemals Duplikate außer Betrieb? dh 1,2,3,1,2,3,3,2,1? – NathanOliver

+0

Nein, die Nummern sind alle in Reihenfolge – ChaseSRR

+0

Also, ich sehe keine Frage hier. Womit willst du helfen? – iheanyi

Antwort

1

Sie müssen die Zeile ignorieren, wenn die ID dupliziert wird mit getline()

Der Code wird so sein:

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <sstream> 
#include <limits> 
#include <cstdio> 
#include <string> 
int main() { 
    int ID = 0; //pirate ID number 
    int IDTest; 
    char ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10; //vote on amendments 
    std::string vote; //vote for captain 
    std::string ignore; //ignore 
    std::ifstream fileReader; //open file for reading 
    fileReader.open("asdas.txt"); 
    if (fileReader.fail()) 
    { 
     std::cout << "The ballots failed to open with code: " << fileReader.failbit; 
    } 
    else 
    { 
     do 
     { 
      IDTest = ID; 
      fileReader >> ID; 
      if (IDTest != ID) 
      { 
       std::cout << "Id:" << ID; 
       fileReader >> ch1; 
       fileReader >> ch2; 
       fileReader >> ch3; 
       fileReader >> ch4; 
       fileReader >> ch5; 
       fileReader >> ch6; 
       fileReader >> ch7; 
       fileReader >> ch8; 
       fileReader >> ch9; 
       fileReader >> ch10; 
       std::cout << " char 1 - 10: " << ch1 << ch2 << ch3 << ch4 << ch5 << ch6 << ch7 << ch8 << ch9 << ch10; 
       getline(fileReader, vote); 
       std::cout << " the votee: " << vote << std::endl; 
      } 
      else { 
       getline(fileReader, ignore); 
      } 
     } while (!fileReader.eof()); 
    } 
    fileReader.close(); 
    std::cin.get(); 
    return 0; 
} 
+0

Danke !, Ich müde mit filereader.ignore in Richtung Anfang und ich denke, ich hatte gerade die Schleife in der falschen Reihenfolge. Das hat mein Problem gelöst. Vielen Dank. – ChaseSRR

0

würde ich eine map verwenden

std::ifstream fileReader; //open file for reading 
fileReader.open("BallotsHogwart.txt"); 
if (fileReader.fail()) 
{ 
    std::cout << "The ballots failed to open with code: " << fileReader.failbit; 
} 
else 
{ 
    string line; 
    std::map<string, string> myvotes; 
    do 
    { 
     getline(filereader, line); 
     // pull out ID 
     std::map<string,string>::iterator value = myvotes.find(ID); 
     if (value == myvotes.end()) 
      continue; 
     // do the rest of your processing on line. 
     // put "Harry Potter" in map. 
     myvotes.insert(ID, candidate); 

    } while(!fileReader.eof()); 

    fileReader.close(); 
    return 0; 
} 
Verwandte Themen