[C ++ Mejorar la programación] Contenedor de cadenas 3.1

Contenedor de 3.1 cuerdas

3.1.1 Concepto básico de cuerda

Naturaleza:

  • cadena es una cadena de estilo C ++, y cadena es esencialmente una clase

La diferencia entre string y char *:

  • char * es un puntero
  • String es una clase que encapsula char * y administra esta cadena, que es un contenedor de tipo char *.

Características:

Muchos métodos de miembros están encapsulados dentro de la clase de cadena

Por ejemplo: buscar buscar, copiar copiar, eliminar eliminar reemplazar reemplazar, insertar insertar

String administra la memoria asignada por char *, no se preocupe por copiar fuera de límites y valor fuera de límites, etc., es responsabilidad de la clase

3.1.2 constructor de cadenas

Prototipo de constructor:

  • string();// Crea una cadena vacía Por ejemplo: string str;
    string(const char* s);// Inicializa con string s
  • string(const string& str); // Usa un objeto de cadena para inicializar otro objeto de cadena
  • string(int n, char c); // Usa n caracteres c para inicializar

Ejemplo:

#include <string>
//string构造
void test01()
{
	string s1; //创建空字符串,调用无参构造函数
	cout << "str1 = " << s1 << endl;

	const char* str = "hello world";
	string s2(str); //把c_string转换成了string

	cout << "str2 = " << s2 << endl;

	string s3(s2); //调用拷贝构造函数
	cout << "str3 = " << s3 << endl;

	string s4(10, 'a');
	cout << "str3 = " << s3 << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

Resumen: Los múltiples métodos de construcción de cuerdas no son comparables y se pueden usar de manera flexible.

3.1.3 Operación de asignación de cadenas

Función descriptiva:

  • Asignar valor a la cadena

Prototipo de función para asignación:

  • string& operator=(const char* s); // char * tipo cadena se asigna a la cadena actual
  • string& operator=(const string &s); // Asignar la cadena s a la cadena actual
  • string& operator=(char c); // Los caracteres se asignan a la cadena actual
  • string& assign(const char *s); // Asignar la cadena s a la cadena actual
  • string& assign(const char *s, int n); // Asignar los primeros n caracteres de la cadena sa la cadena actual
  • string& assign(const string &s); // Asignar la cadena s a la cadena actual
  • string& assign(int n, char c); // Usa n caracteres c para asignar la cadena actual

Ejemplo:

//赋值
void test01()
{
	string str1;
	str1 = "hello world";
	cout << "str1 = " << str1 << endl;

	string str2;
	str2 = str1;
	cout << "str2 = " << str2 << endl;

	string str3;
	str3 = 'a';
	cout << "str3 = " << str3 << endl;

	string str4;
	str4.assign("hello c++");
	cout << "str4 = " << str4 << endl;

	string str5;
	str5.assign("hello c++",5);
	cout << "str5 = " << str5 << endl;


	string str6;
	str6.assign(str5);
	cout << "str6 = " << str6 << endl;

	string str7;
	str7.assign(5, 'x');
	cout << "str7 = " << str7 << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

para resumir:

Hay muchas operator=formas de asignar valores de cadena, esta forma es más práctica

3.1.4 Concatenación de cadenas de caracteres

Función descriptiva:

  • Logra empalmar cuerdas al final de la cuerda.

Prototipo de función:

  • string& operator+=(const char* str); // Sobrecarga + = operador
  • string& operator+=(const char c); // Sobrecarga + = operador
  • string& operator+=(const string& str); // Sobrecarga + = operador
  • string& append(const char *s); // Conecta la cadena s al final de la cadena actual
  • string& append(const char *s, int n); // Conecta los primeros n caracteres de la cadena s al final de la cadena actual
  • string& append(const string &s); // 同 operador + = (cadena const & str)
  • string& append(const string &s, int pos, int n);// Los n caracteres de pos en la cadena s están conectados al final de la cadena

Ejemplo:

//字符串拼接
void test01()
{
	string str1 = "我";

	str1 += "爱玩游戏";

	cout << "str1 = " << str1 << endl;
	
	str1 += ':';

	cout << "str1 = " << str1 << endl;

	string str2 = "LOL DNF";

	str1 += str2;

	cout << "str1 = " << str1 << endl;

	string str3 = "I";
	str3.append(" love ");
	str3.append("game abcde", 4);
	//str3.append(str2);
	str3.append(str2, 4, 3); // 从下标4位置开始 ,截取3个字符,拼接到字符串末尾
	cout << "str3 = " << str3 << endl;
}
int main() {

	test01();

	system("pause");

	return 0;
}

Resumen: hay muchas versiones sobrecargadas de empalme de cuerdas, solo recuerde algunas en la etapa de principiante

3.1.5 búsqueda y reemplazo de cadenas

Función descriptiva:

  • Buscar: busca si existe la cadena especificada
  • Reemplazar: reemplaza la cuerda en la posición especificada

Prototipo de función:

  • int find(const string& str, int pos = 0) const; // Encuentra la posición de la primera aparición de str, comenzando desde pos
  • int find(const char* s, int pos = 0) const; // Encuentra la posición de la primera aparición de s, comenzando desde pos
  • int find(const char* s, int pos, int n) const; // Encuentra la primera posición de los primeros n caracteres de s desde la posición pos
  • int find(const char c, int pos = 0) const; // Encuentra la primera posición de ocurrencia del carácter c
  • int rfind(const string& str, int pos = npos) const; // Encuentra la última posición de str, comenzando desde pos
  • int rfind(const char* s, int pos = npos) const; // Encuentra la posición de la última aparición de s, comenzando desde pos
  • int rfind(const char* s, int pos, int n) const; // Encuentra la última posición de los primeros n caracteres de s desde pos
  • int rfind(const char c, int pos = 0) const; // Encuentra la última posición de ocurrencia del carácter c
  • string& replace(int pos, int n, const string& str); // Reemplazar n caracteres de pos a string str
  • string& replace(int pos, int n,const char* s); // Reemplazar n caracteres de pos a string s

Ejemplo:

//查找和替换
void test01()
{
	//查找
	string str1 = "abcdefgde";

	int pos = str1.find("de");

	if (pos == -1)
	{
		cout << "未找到" << endl;
	}
	else
	{
		cout << "pos = " << pos << endl;
	}
	

	pos = str1.rfind("de");

	cout << "pos = " << pos << endl;

}

void test02()
{
	//替换
	string str1 = "abcdefgde";
	str1.replace(1, 3, "1111");

	cout << "str1 = " << str1 << endl;
}

int main() {

	//test01();
	//test02();

	system("pause");

	return 0;
}

para resumir:

  • buscar la búsqueda es de izquierda a atrás, rfind de derecha a izquierda
  • Buscar devuelve la primera posición del carácter después de encontrar la cadena y devuelve -1 si no se encuentra
  • Al reemplazar, debe especificar desde qué posición, cuántos caracteres y qué tipo de cadena reemplazar

3.1.6 Comparación de cadenas de cadenas

Función descriptiva:

  • Comparación entre cadenas

Método de comparación:

  • La comparación de cadenas consiste en comparar el código ASCII del carácter.

= Devolver 0

> Volver 1

<Devolver -1

Prototipo de función:

  • int compare(const string &s) const; // Comparar con la cadena s
  • int compare(const char *s) const; // Comparar con la cadena s

Ejemplo:

//字符串比较
void test01()
{

	string s1 = "hello";
	string s2 = "aello";

	int ret = s1.compare(s2);

	if (ret == 0) {
		cout << "s1 等于 s2" << endl;
	}
	else if (ret > 0)
	{
		cout << "s1 大于 s2" << endl;
	}
	else
	{
		cout << "s1 小于 s2" << endl;
	}

}

int main() {

	test01();

	system("pause");

	return 0;
}

Resumen: La comparación de cadenas se utiliza principalmente para comparar si dos cadenas son iguales. No es muy significativo juzgar quién es más grande y quién es más pequeño.

3.1.7 acceso a caracteres de cadena

Hay dos formas de acceder a un solo carácter en una cadena

  • char& operator[](int n); // Obtener caracteres a través de []
  • char& at(int n); // Obtener caracteres a través del método at

Ejemplo:

void test01()
{
	string str = "hello world";

	for (int i = 0; i < str.size(); i++)
	{
		cout << str[i] << " ";
	}
	cout << endl;

	for (int i = 0; i < str.size(); i++)
	{
		cout << str.at(i) << " ";
	}
	cout << endl;


	//字符修改
	str[0] = 'x';
	str.at(1) = 'x';
	cout << str << endl;
	
}

int main() {

	test01();

	system("pause");

	return 0;
}

Resumen: hay dos formas de acceder a un solo carácter en una cadena, use [] o en

3.1.8 inserción y eliminación de cadenas

Función descriptiva:

  • Insertar y eliminar caracteres en cadena

Prototipo de función:

  • string& insert(int pos, const char* s); // Insertar cadena
  • string& insert(int pos, const string& str); // Insertar cadena
  • string& insert(int pos, int n, char c); // Inserta n caracteres en la posición especificada c
  • string& erase(int pos, int n = npos); // Eliminar n caracteres comenzando desde Pos

Ejemplo:

//字符串插入和删除
void test01()
{
	string str = "hello";
	str.insert(1, "111");
	cout << str << endl;

	str.erase(1, 3);  //从1号位置开始3个字符
	cout << str << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

** Resumen: ** Los subíndices iniciales para la inserción y eliminación comienzan desde 0

3.1.9 subcadena de cadena

Función descriptiva:

  • Obtenga la subcadena deseada de la cadena

Prototipo de función:

  • string substr(int pos = 0, int n = npos) const; // Devuelve una cadena que consta de n caracteres que comienzan en pos

Ejemplo:

//子串
void test01()
{

	string str = "abcdefg";
	string subStr = str.substr(1, 3);
	cout << "subStr = " << subStr << endl;

	string email = "[email protected]";
	int pos = email.find("@");
	string username = email.substr(0, pos);
	cout << "username: " << username << endl;

}

int main() {

	test01();

	system("pause");

	return 0;
}

** Resumen: ** El uso flexible de la función de subcadena puede obtener información efectiva en el desarrollo real

Para obtener más información, siga la cuenta oficial:
img

Supongo que te gusta

Origin blog.csdn.net/yegeli/article/details/114442326
Recomendado
Clasificación