2011-03-30 9 views
7

Quiero comparar dos cadenas. ¿Es posible con strcmp? (Lo intenté y parece que no funciona). ¿Es string::compare una solución?strcmp o cadena :: comparar?

Aparte de esto, ¿hay alguna manera de comparar un string con un char?


Gracias por los primeros comentarios. Estaba codificando en C++ y sí, fue std::string, como algunos de ustedes mencionaron. No publiqué el código porque quería aprender el conocimiento general y es un código bastante largo, por lo que era irrelevante para la pregunta.

Creo que aprendí la diferencia entre C++ y C, gracias por señalarlo. Y trataré de usar operadores sobrecargados ahora. Y por cierto también funcionó string::compare.

+0

"parece que no trabaja" - puede ser más específico? ¿Cuáles son los parámetros y cuál es el resultado? –

+0

Si está programando en C++, debería usar expresiones idiomáticas de C++, lo que significa 'cadena' de C++ y sus métodos asociados. Para C, use modismos en C, como 'char *' y 'strcpy'. –

+0

¿qué quiere decir con "parece que no funciona"? – helloworld922

Respuesta

21

Para C++, use std::string y compare usando string::compare.

Para C use strcmp. Si su (me refiero a sus cadenas de programas) (por alguna extraña razón) no están terminadas, use .

Pero, ¿por qué alguien no uso algo tan simple como == para std::string ?

12

Suponiendo que se refiere a std::string, ¿por qué no utilizar los operadores sobrecargados: str1 == str2, str1 < str2?

+0

vea mi comentario en la publicación de ildjarn sobre por qué querría algo más. – diverscuba23

1

Al usar C++ use las funciones C++ a saber. string::compare. Cuando se utiliza C y se ven obligados a utilizar char* de cadena, utilice strcmp

3

Ver std::basic_string::compare y std::basic_string operators reference (en particular, existe operator==, operator!=, operator<, etc.). Que más necesitas?

+0

también podría intentar averiguar si una cadena es igual, mayor o menor que otra cadena, todo de una vez (piense qué rama descenderá para una estructura de árbol), en cuyo caso una función similar a strcmp es más útil. – diverscuba23

+0

@ diverscuba23: Punto justo de hecho. : -] En cuyo caso, todavía hay 'std :: string :: compare', que debería preferirse a' strcmp' en C++ por el motivo @Paul R comentó. Editaré mi publicación. – ildjarn

1

Con su pregunta, "¿hay alguna forma de comparar una cadena con un char?" ¿quieres decir "Cómo averiguo si un char en particular está contenido en una cadena?" Si es así, la función C-library:

char *strchr(const char *s, int c); 

lo hará por usted.

- (! Y comparar) Pete

1

std :: string puede contener caracteres nulos incrustados.

son los * (...) va a comparar cadenas estilo C, comparando hasta el primer carácter nulo (o la carga máx nr de bytes/caracteres)

cadena :: comparar efectivamente se aplica como una plantilla basic_string, por lo que puede esperar que funcione para otros tipos, como wstring

En la frase poco clara para "comparar una cadena en un carácter", puede comparar la cadena de caracteres a *.begin() o buscar la primera aparición (string :: find_first_of y la cadena :: find_first_not_of)

responsabilidad: escriben en mi HTC, errores tipográficos reservados :)

Cuestiones relacionadas