¿Cómo escribir esto en C++ usando una cadena?
Creo que los amigos que han usado la programación MFC deberían quedar muy impresionados con la clase CString, ¿verdad? De hecho, la clase CString en MFC es realmente conveniente y fácil de usar. Pero si dejamos el marco MFC, ¿hay alguna clase que sea muy conveniente de usar? La respuesta es sí. Algunas personas pueden decir que incluso sin el marco MFC, aún se pueden encontrar formas de usar la API en MFC. Los métodos de operación específicos se proporcionan al final de este artículo. De hecho, muchas personas pueden ignorar el uso de la clase cadena en C++ estándar. Las funciones de la clase de cadena proporcionadas en C++ estándar también son muy poderosas y generalmente se pueden usar cuando desarrollamos proyectos. Ahora enumeraré algunos de los usos específicos a continuación, solo para que sirvan como punto de partida. Bien, ¡deja de decir tonterías y ve al grano!
Si desea utilizar la clase string en C++ estándar, debe incluirla
#include
usando std::string;
usando std::wstring;
o
usando el espacio de nombres std;
Puedes usar string/wstring a continuación, que corresponden a char y wchar_t respectivamente.
El uso de string y wstring es el mismo, solo se usa string para la introducción a continuación:
Constructor de clase de cadena:
string(const char *s ) ; //Inicializado con c string s
string(int n,char c); //Inicializado con n caracteres c
Además, la clase de cadena también admite constructores predeterminados y Los constructores de copia, como string s1; string s2="hello"; Se lanzará una excepción length_error cuando la cadena construida sea demasiado larga para expresarse;
Operaciones de caracteres de la clase de cadena:
const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
Tanto el operador [] como at() devuelven la posición del enésimo carácter en la cadena actual, pero la función at proporciona verificación de rango y generará una excepción out_of_range cuando esté fuera de los límites. El operador de subíndice [] no proporciona acceso de verificación. .
const char *data()const;//Devuelve una matriz de caracteres c no terminada en nulo
const char *c_str()const;//Devuelve una c terminada en nulo String
int copy(char *s, int n, int pos = 0) const;//Copia n caracteres que comienzan con pos en la cadena actual a la matriz de caracteres que comienza con s, devuelve el número real de copias
Descripción característica de la cadena:
int capacidad()const; // Devuelve la capacidad actual (es decir, el número de elementos que se pueden almacenar en la cadena sin agregar memoria) number)
int max_size()const; //Devuelve la longitud de la cadena máxima que se puede almacenar en el objeto de cadena
int size()const; de la cadena actual
int length()const; //Devuelve la longitud de la cadena actual
bool vacío()const //Si la cadena actual está vacía
void resize(int len,char c);//Establece el tamaño actual de la cadena en len y completa la parte insuficiente con el carácter c
Operaciones de entrada y salida de la clase de cadena:
Clase de cadena El operador sobrecargado operador>> se usa para entrada, y el operador sobrecargado operador<< se usa para operaciones de salida.
La función getline(istream &in,string &s) se utiliza para leer la cadena del flujo de entrada en s, separada por el carácter de nueva línea '\n'.
Asignación de cadena:
string &operator=(const string &s);//Asignar cadena s a la cadena actual
string &assign(const char *s) ;//Asigna un valor usando c tipo string s
string &assign(const char *s,int n);//Asigna un valor usando n caracteres comenzando desde c string s
string &assign(const string &s);//Asigna la cadena s a la cadena actual
string &assign(int n,char c);//Asigna n caracteres c a la cadena actual
string &assign(const string &s,int start,int n);//Asigna n caracteres comenzando desde el inicio en la cadena s a la cadena actual
string &assign( const_iterator primero, const_itertor último);//Asignar la parte entre el primer y el último iterador de la cadena
Conexión de cadena:
string &operator+=(const string &s); //Conecta la cadena s al final de la cadena actual;
string &append(const char *s); //Conecta la cadena tipo c s al final de la cadena actual
string &append(const char *s,int n) ;//Conecta los primeros n caracteres de la cadena s de tipo c al final de la cadena actual
string &append(const string &s //Igual que operator+ =()
string &append(const string &s,int pos,int n);//Concatenar n caracteres comenzando desde pos en la cadena s hasta el final de la cadena actual
string &append(int n,char c); /Agregar n caracteres c al final de la cadena actual
string &append(const_iterator first, const_iterator last);//Combinar el iterador primero y el último La parte intermedia está conectada al final de la cadena actual
Comparación de cadenas:
bool operator==(const string &s1,const string &s2)const;//Comparar dos cadenas Igualdad
Operadores">"," <",">=","<=","!=" están todos sobrecargados para la comparación de cadenas;
int compare(const string &s) const;//Compara el tamaño de la cadena actual y s
int compare(int pos, int n, const string &s)const;//Compara la cadena actual desde pos El tamaño de la cadena que consta de los primeros n caracteres y s
int compare(int pos, int n, const string &s, int pos2, int n2) const; //Compara la cadena actual comenzando desde pos Una cadena de n caracteres y una cadena de n caracteres en s
//El tamaño de una cadena de n2 caracteres a partir de pos2
p>
int comparar(const char *s) const;
int comparar(int pos, int n,const char *s) const;
int comparar(int pos , int n, const char *s, int pos2) const;
La función de comparación devuelve 1 cuando >, -1 cuando < y 0 cuando ==
Asunto de la cadena Cadena :
string substr(int pos = 0, int n = npos) const;//Devuelve una cadena que consta de n caracteres a partir de pos
Intercambio de cadenas: p>
void swap(string &s2); //Intercambia la cadena actual y el valor de s2
Función de búsqueda de clase de cadena:
int find(char c, int pos = 0) const;//Comienza desde pos para encontrar la posición del carácter c en la cadena actual
int find(const char *s, int pos = 0) const;//Comienza desde pos para encontrar la cadena s Posición en la cadena actual
int find(const char *s, int pos, int n) const;//Comience desde pos para encontrar la posición de los primeros n caracteres en la cadena s en la cadena actual
int find(const string &s, int pos = 0) const;//Comience desde pos para encontrar la posición de la cadena s en la cadena actual
//Regrese a la posición cuando la búsqueda es exitosa, falla devuelve el valor de string::npos
int rfind(char c, int pos = npos) const;//Comience desde pos y busque la posición del carácter c en el archivo actual cadena de atrás hacia adelante
int rfind(const char *s, int pos = npos) const;
int rfind(const char *s, int pos, int n = npos) const;
int rfind(const string &s,int pos = npos) const;
//Comienza desde pos y encuentra la posición de la cadena que consta de los primeros n caracteres en el string s de atrás hacia adelante en la cadena actual, devuelve la posición exitosamente, devuelve el valor de string::npos en caso de falla
int find_first_of(char c, int pos = 0) const;//Comenzar desde pos para encontrar la primera aparición del carácter c
int find_first_of(const char *s, int pos = 0) const;
int find_first_of(const char *s, int pos, int n) const;
int find_first_of(const string &s,int pos = 0) const;
//Comience desde pos para encontrar la posición del primer carácter en la cadena actual en la matriz compuesta por los primeros n caracteres de s.
Si la búsqueda falla, devuelve string::npos
int find_first_not_of(char c, int pos = 0) const;
int find_first_not_of(const char *s, int pos = 0) const;
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;
//Encuentra la posición del primer carácter que no está en la cadena s de la cadena actual. Si falla, se devolverá string::npos
int find_last_of(char c, int pos. = npos) const;
int find_last_of(const char *s, int pos = npos) const;
int find_last_of(const char *s, int pos, int n = npos) const;
int find_last_of(const string &s,int pos = npos) const;
int find_last_not_of(char c, int pos = npos) const;
int find_last_not_of(const char *s, int pos = npos) const;
int find_last_not_of(const char *s, int pos, int n) const;
int find_last_not_of(const cadena &s,int pos = npos) const;
//find_last_of y find_last_not_of son similares a find_first_of y find_first_not_of, excepto que buscan de atrás hacia adelante
Función de reemplazo de clase de cadena:
string &replace(int p0, int n0,const char *s);// Elimina n0 caracteres a partir de p0 y luego inserta la cadena s en p0
string &replace(int p0 , int n0,const char *s, int n);// Elimina n0 caracteres a partir de p0 y luego inserta los primeros n caracteres de la cadena s en p0
string &replace(int p0, int n0, const string &s);// Elimina n0 caracteres a partir de p0 y luego inserta la cadena s en p0
string &replace(int p0, int n0, const string &s, int pos, int n);/ /Elimine n0 a partir de p0 caracteres y luego inserte n caracteres a partir de pos en la cadena s en p0
string &replace(int p0, int n0,int n, char c);//Elimine n0 caracteres a partir de desde p0, y luego inserte n caracteres c
string &replace(iterator first0, iterator last0,const char *s);//Reemplace la parte entre [first0, last0)
Reemplazar con cadena s
string &replace(iterator first0, iterator last0,const char *s, int n);//Reemplazar la parte entre [first0, last0) con los primeros n caracteres de s
string &replace(iterator first0, iterator last0,const string &s);//Reemplazar la parte entre [first0, last0) con string s
string &replace(iterator first0, iterator last0,int n , char c);//Reemplazar la parte entre [first0, last0) con n caracteres c
string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);//Reemplazar la parte entre [ first0, last0) con la cadena entre [first, last)
Función de inserción de clase de cadena:
string &insert(int p0 , const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string) &s, int pos, int n);
//Las primeras cuatro funciones insertan los primeros n caracteres comenzando desde pos en la cadena s en la posición p0
string &insert(int p0, int n, char c);// Esta función inserta n caracteres c en p0
iterator insert(iterator it, char c);// Inserta el carácter c en él y devuelve la posición del iterador después de la inserción
void insert(iterador, const_iterator primero, const_iterator último);//Inserte caracteres entre [primero, último) en él
void insert(iterador, int n, char c) ;//Insertar n caracteres c en él
Función de eliminación de la clase de cadena
borrar iterador (iterador primero, iterador último);//Eliminar todos los caracteres entre [primero, último) y devuelve la posición del iterador después de la eliminación
iterator erase(iterator it);// Elimina el carácter señalado por él, devuelve la posición del iterador después de la eliminación
string &erase( int pos = 0, int n = npos);//Elimina n caracteres a partir de pos y devuelve la cadena modificada
Procesamiento del iterador de la clase de cadena:
La clase de cadena proporciona una iterador para recorrido hacia adelante y hacia atrás. El iterador proporciona una sintaxis para acceder a caracteres individuales, similar a las operaciones de puntero. El iterador no verifica el alcance.
Utilizar string::iterator o string::const_iterator para declarar variables de iterador. const_iterator no permite cambiar el contenido de la iteración.
Las funciones de iterador más utilizadas son:
const_iterator begin()const;
iterator begin(); //Devuelve la posición inicial de la cadena
const_iterator end(); const;
iterator end(); //Devuelve la posición después del último carácter de la cadena
const_iterator rbegin()const;
iterator rbegin(); //Devuelve la posición del último carácter de la cadena
const_iterator rend()const;
iterator rend() //Devuelve la posición antes del primer carácter de la cadena
rbegin y rend se utilizan para el acceso iterativo de atrás hacia adelante, y se implementan configurando el iterador string::reverse_iterator, string::const_reverse_iterator
Procesamiento de flujo de cadenas:
Pass Defina la implementación de las variables ostringstream e istringstream, #incluya
Por ejemplo:
string input("hola, esto es una prueba");
istringstream es(entrada);
cadena s1,s2,s3,s4;
es>>s1>>s2>>s3>>s4;//s1= "hola, esto",s2="es",s3="a",s4="prueba"
ostringstream os;
os< cout< Lo anterior es una breve introducción a la clase de cadena C++. Si se usa bien, sus funciones no serán muy inferiores a las de la clase CString en MFC ¡Jaja, opinión personal! Finalmente, presentaremos cómo hacer referencia a algunas clases en MFC, como CString, en aplicaciones Win32. 1. Haga clic derecho en el directorio del proyecto y seleccione "Propiedades"--->"Propiedades de configuración"--->"General"--->"Uso de MFC"--->" Utilice MFC en una biblioteca estática",