wie benutze ich 'string::find', ein Wort zu finden in der Datei mit C++
Ich bin momentan dabei ein Programm, das eine Datei öffnen und suchen Sie die gewünschte Wort im text.
Ich habe die folgenden word-bank...
Lawyer
Smith Janes
Doctor
Michael Zane
Teacher
Maria Omaha
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
//Declarations
string reply;
string inputFileName;
ifstream inputFile;
char character;
cout << "Input file name: ";
getline(cin, inputFileName);
//Open the input file.
inputFile.open(inputFileName.c_str());
//Check the file opened successfully.
if ( ! inputFile.is_open())
{
cout << "Unable to open input file." << endl;
cout << "Press enter to continue...";
getline(cin, reply);
return 1;
}
Nun, dass ich speichern Sie die gesamte Datei in einen string, wie könnte ich die Suche im inneren, string
für ein bestimmtes Wort ich bin auf der Suche nach...
Lerne ich C++ von dieser Website http://www.cprogramming.com/tutorial/lesson10.html
Ich glaube, Sie verwenden string::find
aber ich konnte nicht viel Bezug auf, wie die Suche neben dieser wesite..
http://www.cplusplus.com/reference/string/string/find/
Dieser Abschnitt zeigt die gesamte Datei.
string original;
getline(inputFile, original, '\0');
cout << original << endl;
cout << "\nEnd of file reached\n" << endl;
//Close the input file stream
inputFile.close();
cout << "Press enter to continue...";
return 0;
}
Dies ist, wie ich denke, dass das Programm handeln sollte...
Please enter a word: Smith Janes
Smith Janes Lawyer
another example....
Please enter a word: Doctor
Michael Zane Doctor
- Was ist die Frage genau?
- Ich bin auf der Suche ein Wort in meiner Datei, die angezeigt wird, Ihren Beruf. Die Berufe aufgelistet sind, die auf der Spitze zusammen mit Ihrem Namen auf der Unterseite.
- Das ist keine Frage, das ist eine Beschreibung, was Sie zu tun versuchen. Ich Frage Sie, was ist Los mit ihm?
- oh, tut mir Leid... Es ist nichts falsch mit meinem code, aber ich Suche nach Hilfe auf, wie mit [string::find], um das umzusetzen in meinem code so konnte ich Suche ein Wort in meiner Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
find
gibt die position (null-basiert offset) in der Zeichenfolge, wo das Wort gefunden ist. Wenn das Wort nicht gefunden, es gibtnpos
.res
ist ein index in den string an der Stelle, wo "Janes" ist (sein Sollte 13).Funktionen, die Sie zu sein scheinen zu Fragen, für die ist komplexer als die Suche nach etwas Inhalt in einen string. Die Ausgabe, die Sie zeigen, eine Benutzer-Eingabe entweder ein name oder ein Beruf, und die Ausgabe ist die entsprechende Klasse oder den Namen.
Es ist einfach, ein Programm zu schreiben, das zeigt die Linie der 'Nadel' ist, oder um zu zeigen, immer zeigen Sie die Vorherige Zeile, oder zeigen immer die nächste Zeile. Aber was Sie fordert, ist zu zeigen, einen oder den anderen je nachdem, was gesucht wurde.
Eine einfache Art, könnten wir dies umsetzen zu finden, wenn die Nadel auf einer geraden oder ungeraden Zeile und der Basis, was wir zeigen auf, dass.
Ersten bekommen wir die Nummer der Zeile.
Basierend auf den Inhalten, die Sie zeigte, Berufe sind auf den geraden Zeilen und die Namen sind auf ungeraden Zeilen. Wir können leicht die Zeilennummern wir wollen:
Weiter, wir teilen den text in Linien, denn wir brauchen für die Arbeit mit ganzen Zeilen und erhalten Linien, die durch den index. Die Methode, die ich unten zeigen eine Kopie des Textes und ist ineffizient, aber es ist einfach.
Hier ist eine split-Funktion:
Und verwenden wir die split-Funktion so auf:
Nun, wir können zeigen die Linien, die wir wollen.
Was, wenn Sie setzen das Programm gemeinsam prints:
haystack.find(needle)
) gibt es einen sehr einfachen Algorithmus für die Suche von zwei, drei oder eine beliebige Anzahl von strings sein; In pseudo-code es istfor (each string) { search the string }
.std::string::find
Dokumentationnpos
ist eine spezielle index-Wert zurückgegeben, um anzuzeigen, dass der substring nicht gefunden wurde, unter anderem. In der pseudo-code, den ich früher nachgewiesen, müssen Sie auch was zu tun mit den gefundenen substring und was tun, wenn der substring nicht gefunden wird, wird als Teil der{ search the string }
.std::string haystacks[] = {"aa","ab","ac","xx"}; std::string needle = "a"; for (auto haystack : haystacks) { auto res = s.find(heedle); if (std::string::npos == res) { std::cout << "NOT FOUND!\n"; } else { std::cout << "found\n"; } }
Ich denke, das hat alle Informationen, die Sie benötigen.
http://www.cplusplus.com/reference/string/string/find/
std::string::find
macht und Ihnen sagt, was Sie Parameter, die Sie senden können. Es gibt sogar Beispiele auf, was es gibt, mit gegebenen inputs. Ich denke, dass vielleicht sollten Sie ersetzengetline(inputFile, original, '\0')
mit nurgetline(inputFile, original)
, dann re-format Ihrer Eingabe-Datei, so dass name und Beruf auf der gleichen Linie, und jede person ist auf einer separaten Zeile. Dann gehen Sie durch die Datei Zeile für Zeile und wenn Sie finden, die Eingabe von text in einer Zeile (original
), Ausgang, line