2015-04-02 12 views
5

W STL, kiedy robię s.find(""), zwraca 0, podczas gdy s.find_first_of("") zwraca -1 (npos). Jaki jest powód tej różnicy?find vs find_first_of przy wyszukiwaniu pustego ciągu znaków

+1

Spodziewam się, że 's.find (" ");' zwróci 0 (i zrobi to przy pomocy użytecznych implementacji). Na przykład: http://coliru.stacked-crooked.com/a/3d5a6076bde75e28 –

+0

prawda. dzięki za wskazanie tego. dokonał zmiany na pytanie. nadal nie wyjaśnia różnicy –

Odpowiedz

10

s.find(t) znajduje pierwsze wystąpienie podłańcucha t w s. Jeśli t jest pusta, to zjawisko jest na początku s i s.find(t) powróci 0.

s.find_first_of(t) znajdzie pierwsze wystąpienie jednego z bohaterów w t. Jeśli t jest pustym łańcuchem, to w t nie ma znaków, więc nie można znaleźć wystąpienia, a find_first_of zwróci npos.

Live on ideone.

+0

, ale początek łańcucha nie ma "". ma "a" prawo?, jak w twoim przykładzie. should s.find ("') zwraca także -1? –

+0

@littlecegian:" "składa się z zerowych znaków iz pewnością istnieje podciąg o długości 0 na początku dowolnego ciągu znaków. (Istnieje również podłańcuch o długości 0, począwszy od w każdej innej pozycji w łańcuchu, jeśli istnieją inne pozycje, ale jedna w pozycji 0 jest najdalsza od lewej). – rici

+0

jeśli tak jest, to find_first_of powinno również zwracać 0, ponieważ, ze wszystkich znaków w "" pusty łańcuch jest znak, który po wyszukaniu zwraca 0. right? –

Powiązane problemy