2009-05-31 9 views

Antwort

139

I Methode vergleichen würde verwenden zu kopieren:

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

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

Ich habe vergessen zu vergleichen - das ist die beste Methode, aber es gibt keine Notwendigkeit, c_str (0, um eine Zeichenfolge zu erhalten –

+0

Sie können String s ("xyz") == "xyz" auch. :) – Skurmedel

+0

Neil, du hast absolut recht, ich redigiere die Antwort und entferne c_str() call – Wacek

1

Ich fühle, dass ich Ihre Frage nicht vollständig verstehe. Es sieht so aus, als ob es trivial sein sollte:

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

Dies sieht nur (höchstens) die ersten drei Zeichen. Die Verallgemeinerung für eine Zeichenfolge, die zum Zeitpunkt der Kompilierung unbekannt ist, würde Sie benötigen die oben mit einer Schleife zu ersetzen:

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

Nun, ich kann Strings in C-Funktionen vergleichen. Meine Frage war objektorientiert mit C++ STL. – jackhab

+0

Hier wird keine C-Funktion verwendet. Und die Standard-Bibliothek schließt nicht aus, dass du eigene Aufgaben erfindest. –

+5

und was, wenn t kürzer als s ist? – vidstige

8

Blick auf die String Algo Bibliothek Boost, die eine Reihe von nützlichen Funktionen, wie starts_with hat, istart_with (Groß- und Kleinschreibung), etc. Wenn Sie nur einen Teil der Boost-Bibliotheken in Ihrem Projekt verwenden möchten, dann können Sie bcp verwenden nur benötigten Dateien

11

Ein Ansatz das könnte mehr drin sein Mit dem Geist der Standard-Bibliothek zu bleiben würde Ihren eigenen begins_with-Algorithmus definieren.

#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()); 
} 

Dies stellt eine einfachere Schnittstelle zu Client-Code und ist kompatibel mit den meisten Standard Library Containern.

+0

Cool! Dies sollte hinzugefügt werden, um zu boosten! – David

+0

@David: Wenn boost eine zulässige Abhängigkeit ist, siehe boost :: algorithm :: [starts_with] (http://www.boost.org/doc/libs/1_65_1/doc/html/boost/algorithm/starts_with.html) - Beginnt mit Prädikat – Gabor

Verwandte Themen