2011-03-12 7 views
3

En C++ j'ai un répertoire avec beaucoup de noms, tels que Sinatra, Frank, et je veux que l'utilisateur puisse entrer n'importe quelle longueur de chaîne pour scanner le dossier pour cela. Une fois que l'utilisateur a entré une chaîne de n'importe quelle longueur désirée, comment puis-je scanner une chaîne entière de "Sinatra, Frank" pour juste "Frank" ou "Sinatra" ou "atra" et voir à quel (s) nom (s) il appartient?Trouver une sous-chaîne dans une chaîne

Répondre

1

Vous pouvez utiliser strstr() pour rechercher une sous-chaîne dans une chaîne.

6

Vous pouvez utiliser la méthode std::string::find:

string s = "Sinatra, Frank"; 
string::sizetype index = s.find("Frank"); 

Cela vous obtient l'indice du match (qui dans ce cas est 9).

0

Si c'est un std::string, vous pouvez utiliser la méthode .find() du « Sinatra, Frank » string

2

Une question: est votre répertoire un fichier plat avec chaque nom sur une nouvelle ligne (comme dans votre exemple avec " Sinatra, Frank "dans un format comme" Nom, Prénom ", etc.), ou avez-vous une structure de ce répertoire où chaque chaîne de noms est un noeud d'un tableau, une liste chaînée, etc?

Notez que pour strstr():

strstr(const char *s1, const char *s2) 

localise la première occurrence de la chaîne s2 dans s1, qui peut être suffisant pour vous.

Pour votre chaîne d'entrée, assurez-vous toujours de vérifier les limites de taille d'une manière ou d'une autre; Si l'utilisateur entre une chaîne via une interface, elle doit être gérée explicitement pour s'assurer qu'elle ne dépasse pas votre espace de stockage ou contient des caractères malveillants ou du code.

Ken's solution produit la position de la sous-chaîne dans la chaîne d'origine (et tant qu'elle n'est pas nulle cela signifie qu'il y a un 'hit') mais ne vous dit pas quelle entrée du répertoire est le hit; Votre code devra suivre quelles entrées/entrées sont des hits afin que vous puissiez retourner un ensemble significatif de résultats.

Questions connexes