2016-04-20 8 views
3

Ich entschuldige mich im Voraus, wenn dies bereits abgedeckt wurde, aber ich habe in den letzten paar Stunden gesucht, und ich bin auf den Punkt des Wahnsinns gefahren.Wie durch eine Datei zu finden, um ganze Zahlen zu finden

Ich muss grundsätzlich eine Eingabedatei einlesen, die ganze Zahlen irgendwo in der Datei haben könnte.

Abtastwerteingang:

Wort Wort Wort Wort 5 Wort Wort 7 Wort Wort Wort Wort Wort 8 Wort Wort Wort Wort. wort wort wort wort wort wort 67. wort 9

Ich brauche nur die ganzen Zahlen, dann setze die ganzen Zahlen in einen Vektor. Ich habe versucht, es nur in einem Zeichen zu einem Zeitpunkt zu lesen und dann in einen Typ int umzuwandeln, aber das funktioniert nicht wirklich. Ich habe versucht, es über eine Zeichenfolge einzulesen und dann in eine Ganzzahl umzuwandeln, aber das funktioniert auch nicht. Die Nummern können sich an beliebiger Stelle in der Datei befinden. Ich hoffe, das macht Sinn, aber jede Hilfe wäre willkommen.

Ich verwende Visual Studios, wenn es darauf ankommt. Ich programmiere auch in C++.

+0

Sie müssen die gesamte Eingabe lesen, sie durch das Leerzeichen auf ein Array von Wörtern aufteilen, dann die Wörter (entfernen Sie Punkte und Kommas usw.), dann testen Sie das Wort ist Integer und holen Sie es, wenn es ist . Hast du das probiert ?! Wenn Sie es getan haben und es nicht funktioniert, sagen Sie uns, warum – Gubr

+0

ich nicht habe. Gib mir etwas Zeit, um es zu versuchen und umzusetzen. Danke, dachte! – Eisenhower

+1

Klingt Hausaufgaben für mich. – Joel

Antwort

2

Dieses Programm sucht nach Ganzzahlen auf stdin (Sie können einen anderen istream verwenden, wenn Sie möchten) und druckt sie, einen pro Zeile.

#include <iostream> 

int main() 
{ 
    std::istream& input = std::cin; 
    intmax_t value; 
    while (!input.eof()) { 
     if (input >> value) { 
      std::cout << value << '\n'; 
     } else { // not an integer, ignore up to next space                
      input.clear(); 
      input.ignore(std::numeric_limits<std::streamsize>::max(), ' '); 
     } 
    } 
} 
0

Sie können auch <regex> versuchen:

const std::string input{"word word word word 5 word word 7 word word word word word 8 word word word word. word word word word word word 67. word 9"}; 

std::regex numbers_pattern(R"((\b\d+()\b))"); 

for (std::sregex_token_iterator begin(input.begin(), input.end(), 
    numbers_pattern, 1), end; begin != end; ++begin) 
{ 
    std::cout << *begin << '\n'; 
} 

Mit dieser regex Iterator Sie Zahlen in der Zeichenkette suchen können und sie als Text erfassen, dann verwandeln Sie den Text in Nummer mit dem Ansatz, den Sie gerne am meisten.

Werfen Sie einen Blick auf die Demo.

Um es mit einer Datei zu verwenden, sollten Sie die std::string input durch einen Dateistream ersetzen.

Verwandte Themen