comment puis-je utiliser 'string::find' pour trouver un mot dans le fichier à l'aide de C++
Je suis la création d'un programme qui ouvre un fichier et de recherche pour un mot souhaité dans le texte.
J'ai créé le mot suivant de la banque...
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;
}
Maintenant que j'ai enregistrer l'intégralité du fichier en une chaîne de caractères comment pourrais-je recherche à l'intérieur de cette chaîne
pour un mot que je cherche...
Je suis en train d'apprendre le C++ de ce Site http://www.cprogramming.com/tutorial/lesson10.html
Je pense que vous utilisez string::find
mais je ne pouvais pas trouver beaucoup de référence sur la façon de rechercher à côté de ce site..
http://www.cplusplus.com/reference/string/string/find/
Cette section affiche le fichier en entier.
string original;
getline(inputFile, original, ' 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;
}
');
cout << original << endl;
cout << "\nEnd of file reached\n" << endl;
//Close the input file stream
inputFile.close();
cout << "Press enter to continue...";
return 0;
}
C'est de cette façon je pense que le programme devrait agir...
Please enter a word: Smith Janes
Smith Janes Lawyer
another example....
Please enter a word: Doctor
Michael Zane Doctor
- Quelle est la question exactement?
- Je suis à la recherche d'un mot dans mon fichier qui permettra d'afficher leur profession. Les métiers sont répertoriés sur le haut avec leur nom sur le fond.
- Ce n'est pas une question, c'est une description de ce que vous essayez de faire. Je vous demande quel est le problème avec elle?
- oh désolé... Il n'y a rien de mal avec mon code, mais je cherche de l'aide sur la façon d'utiliser [string::find] pour mettre en œuvre dans mon code afin que je puisse chercher un mot dans mon fichier.
Vous devez vous connecter pour publier un commentaire.
find
retourne la position (en partant de zéro offset) dans la chaîne où se trouve le mot. Si le mot n'est pas trouvé, il retournenpos
.res
est un index dans la chaîne à l'endroit où "Janes" est (Devrait être 13).Les fonctionnalités semblent vous demander est plus complexe que simplement trouver un peu de contenu dans une chaîne de caractères. La sortie de vous montrer a une entrée de l'utilisateur un nom ou d'une profession et la sortie est lié d'une profession ou d'un nom.
C'est simple d'écrire un programme qui affiche la ligne de la "aiguille" est sur ou pour afficher la ligne précédente, ou de toujours afficher la ligne suivante. Mais ce que vous demandez, c'est de montrer l'un ou l'autre selon ce qui a été recherché.
La manière la plus simple que nous pouvions mettre en œuvre est de trouver si l'aiguille se trouve sur un pair ou impair de la ligne de base et ce que nous montrons sur que.
Nous avons d'abord obtenir le numéro de la ligne.
En fonction du contenu que vous nous avez montré, les professions sont sur les même lignes et les noms sont sur les lignes impaires. Nous pouvons facilement obtenir les numéros de ligne, nous voulons:
Ensuite, nous pouvons diviser le texte en lignes depuis nous avons besoin de travailler avec l'ensemble des lignes et obtenir des lignes par l'index. La méthode que je montre ci-dessous une copie du texte et est inefficace, mais il est facile.
Voici une fonction split:
Et nous utilisons la fonction de répartition comme suit:
Maintenant, nous pouvons montrer les lignes nous voulons.
Qui une fois que vous mettez le programme imprime:
haystack.find(needle)
) il existe un algorithme très simple pour la recherche de deux, trois, ou n'importe quel nombre de chaînes; En pseudo-code, c'estfor (each string) { search the string }
.std::string::find
de documentationnpos
est un indice spécial à la valeur retourné pour indiquer que la sous-chaîne n'a pas été trouvé, entre autres choses. Dans le pseudo-code que j'ai montré plus tôt, vous devez inclure quoi faire avec les sous-chaîne et que faire si la sous-chaîne n'est pas trouvée, dans le cadre de la{ 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"; } }
Je pense que cela a toutes les informations dont vous avez besoin.
http://www.cplusplus.com/reference/string/string/find/
std::string::find
ne et vous indique quels paramètres vous pouvez l'envoyer. Il donne même des exemples sur de quoi il en retourne avec les entrées données. Je pense que peut-être que vous devez remplacergetline(inputFile, original, '\0')
avec justegetline(inputFile, original)
, puis re-format de votre fichier d'entrée de sorte que le nom et la profession sont sur la même ligne, et chaque personne est sur une ligne distincte. Ensuite, allez dans le fichier ligne par ligne et si vous trouvez l'entrée de texte dans une ligne (original
), sortie ligne