2009-05-31 15 views

Odpowiedz

139

użyłbym porównać metoda:

std::string s("xyzblahblah"); 
std::string t("xyz") 

if (s.compare(0, t.length(), t) == 0) 
{ 
// ok 
} 
+0

Zapomniałem o porównaniu - jest to najlepsza metoda, ale nie ma potrzeby używania c_str (0, aby uzyskać ciąg znaków –

+0

Możesz również napisać ciąg s ("xyz") == "xyz. :) – Skurmedel

+0

Neil, masz absolutną rację, edytowałem odpowiedź i usunąłem c_str() zadzwoń – Wacek

1

Czuję, że nie w pełni rozumiem twoje pytanie. Wygląda na to, że powinno być trywialnie:

s[0]=='x' && s[1]=='y' && s[2]=='z' 

To dotyczy tylko (najwyżej) pierwszych trzech znaków. Uogólnienie na sznurku, który jest znany w czasie kompilacji będzie wymagać, aby zastąpić wyżej z pętlą:

// look for t at the start of s 
for (int i=0; i<s.length(); i++) 
{ 
    if (s[i]!=t[i]) 
    return false; 
} 
+0

Cóż, wiem, jak porównać ciągi znaków przy użyciu funkcji C. Moje pytanie dotyczyło robienia tego w sposób obiektowy za pomocą C++ STL. – jackhab

+0

Nie ma tutaj żadnej funkcji C. A Biblioteka Standardowa nie wyklucza możliwości pisania własnych. –

+5

i co jeśli t jest krótszy niż s? – vidstige

8

Spójrz na impuls za String Algo biblioteki, która posiada szereg przydatnych funkcji, takich jak starts_with, istart_with (niewrażliwy przypadek), itd. Jeśli chcesz użyć tylko część bibliotek Boost w projekcie, a następnie można użyć narzędzia bcp skopiować tylko potrzebne pliki

11

podejście to może być więcej trzymanie się duchem Biblioteki Standardowej byłoby zdefiniowanie własnego algorytmu zaczynającego od algorytmu.

#include <algorithm> 
using namespace std; 


template<class TContainer> 
bool begins_with(const TContainer& input, const TContainer& match) 
{ 
    return input.size() >= match.size() 
     && equal(match.begin(), match.end(), input.begin()); 
} 

Daje to prostszy interfejs do kodu klienta i jest kompatybilny z większością pojemników Biblioteka standardowa.

+0

Fajnie! To powinno być dodane, aby zwiększyć! – David

+0

@David: Jeśli boost jest dozwoloną zależnością, zobacz algorytm boost :: algorithm: [starts_with] (http://www.boost.org/doc/libs/1_65_1/doc/html/boost/algorithm/starts_with.html) - Predykat "Początek z" – Gabor

Powiązane problemy