2009-05-31 14 views

Respuesta

139

yo usaría método de comparación:

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

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

Me olvidé de comparar - este es el mejor método, pero no es necesario usar c_str (0 para obtener una cadena de caracteres –

+0

Puede hacer una cadena s ("xyz") == "xyz" también. :) – Skurmedel

+0

Neil, tienes toda la razón, edité la respuesta y eliminé c_str() llamada – Wacek

1

Siento que no entiendo completamente su pregunta. Parece que debería ser trivial:

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

Esto solo mira (como máximo) los primeros tres caracteres. La generalización de una cadena que no se conoce en tiempo de compilación que requieren volver a sustituir a los anteriores, con un bucle:

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

Bueno, sé cómo comparar cadenas en el uso de funciones de C. Mi pregunta era acerca de hacerlo de forma orientada a objetos mediante C++ STL. – jackhab

+0

Aquí no se usa la función C. Y la biblioteca estándar no le impide escribir sus propias funciones. –

+5

y qué pasa si t es más corto que s? – vidstige

8

mirada a String Algo la biblioteca de la Boost, que tiene una serie de funciones útiles, tales como starts_with, istart_with (entre mayúsculas y minúsculas), etc. Si desea utilizar sólo una parte de las bibliotecas de impulso en su proyecto, a continuación, puede utilizar la utilidad bcp para copiar sólo los archivos necesarios

11

Un enfoque eso podría ser más en mantener el espíritu de la Biblioteca estándar sería definir su propio algoritmo starts_with.

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

Esto proporciona una interfaz más sencilla de código de cliente y es compatible con la mayoría de los contenedores Standard Library.

+0

¡Genial! ¡Esto debería ser agregado para impulsar! – David

+0

@David: si impulsar es una dependencia permitida, consulte boost :: algorithm :: [starts_with] (http://www.boost.org/doc/libs/1_65_1/doc/html/boost/algorithm/starts_with.html) - El predicado 'comienza con' – Gabor

Cuestiones relacionadas