Uso del contenedor String

Uso del contenedor String

Introducción al contenedor de cadenas

Esencia: la cadena es una cadena de estilo C ++ y la cadena es esencialmente una clase;

La diferencia entre string y char *:

① char * es un puntero;

② String es una clase. Char * está encapsulado dentro de la clase. Es un contenedor de tipo char * para administrar esta cadena.

Inicialización del contenedor String

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    const char ch[] = "6sjkasa";  
    string str(ch); // 用字符型数组进行初始化  
    string str1(str1); // 调用string容器的拷贝构造函数初始化  
    string str2("skajda"); // 调用普通构造函数进行初始化  
    string str4(4, 'a'); // 用字符常量初始化字符串的正确方法
} 

 

¿Por qué llamar al constructor de copias?

Cuando la cantidad que ingresa es una variable, se requieren los siguientes pasos:

 

Operación de asignación de cadenas

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    const char ch[] = "6sjkasa";  
    string str(ch); // 用字符型数组进行初始化  
    string str1(str); // 调用string容器的拷贝构造函数初始化  
    string str2("skajda"); // 调用普通构造函数进行初始化  
    string str3(4, 'a'); // 用字符常量初始化字符串的正确方法  
  
    string str4;  
    const char ch1[] = "saskjsk", ch2 = 'a';  
    str4 = ch1; // 用字符型数组赋值字符串  
    cout << str4 << endl;  
    str4 = ch2; // 用字符赋值字符串  
    cout << str4 << endl;  
    str4 = str2; // 用已有字符串赋值字符串  
    cout << str4 << endl;  
    str4.assign(str1); // 用assign成员函数进行字符串的赋值操作  
    cout << str4 << endl;  
    str4.assign(ch1,5); // 用assign成员函数进行字符串的赋值操作(将字符数组的前5个字符赋值给string对象)  
    cout << str4 << endl;  
    str4.assign(ch1); // 用assign成员函数进行字符串的赋值操作  
    cout << str4 << endl;  
    str4.assign(3,'f'); // 用assign成员函数进行字符串的赋值操作  
    cout << str4 << endl;  
}  

 

Concatenación de cadenas

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    string str1 = "shisishd";  
    string str2(1, 'd');  
    str2 += str1; // 在字符串尾部拼接字符串  
    cout << str2 << endl;  
    const char ch1[] = "666", ch2 = 'p';  
    str2 += ch1; // 字符串尾部拼接字符型数组  
    cout << str2 << endl;  
    str2 += ch2; // 字符串尾部拼接字符常量  
    cout << str2 << endl;   
    str2.append(ch1, 2); // 把字符型数组的前2个字符拼接到str2字符串的结尾  
    cout << str2 << endl;  
    str2.append(str1, 4, 3); // 将字符串str1的4-7字符拼接至str2字符串结尾  
    cout << str2 << endl;  
    str2.append(ch1); // 把字符型数组整个拼接至str2字符串的结尾  
    cout << str2 << endl;  
    str2.append(str1); // 把字符串str1整个拼接至str2字符串结尾  
    cout << str2 << endl;  
    str2.append(4, 'e'); // 把4个字符'e'拼接至str2字符串的结尾  
    cout << str2 << endl;  
}  

 

Buscar y reemplazar cadenas

#include <iostream>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string str("sjdjdshgjda"), str1("jd");  
    int pos = str.find(str1, 2);  
    cout << pos << endl;  // pos = 3
}  

 

Aquí vemos que hay tres cadenas "jd", pero comenzamos desde la segunda de izquierda a derecha y la buscamos primero, por lo que "jd" aparece en el tercer carácter por primera vez.

Tanto la función Find como la función rfind devolverán -1 siempre que no se pueda encontrar el carácter correspondiente, lo que indica que no se encuentra el carácter especificado.

#include <iostream>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string str("sjdjdshgjda"), str1("jd");  
    int pos = str.rfind(str1, 10);  
    cout << pos << endl;  // 8
}  

 

#include <iostream>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string str("sjdjdshgjda"), str1("jd");  
    int pos = str.rfind(str1, 10);  
    cout << pos << endl;  
  
    str.replace(3, 2, "666"); // index=3-5的字符替换为"666"  
    pos = str.find("666", 0); // 从str第0个字符开始查找字符串"666"  
    str.replace(pos, sizeof("666"), "777");  
    cout << str << endl;  
}  

 

El anterior es un caso en el que la función de búsqueda y la función de reemplazo se utilizan conjuntamente.

 

Los tipos de funciones sobrecargadas anteriores son similares al uso en el ejemplo del programa, por lo que no los repetiré aquí.

Comparación de contenedores de cadenas

#include <iostream>  
#include <string>  
using namespace std;  
  
int main()  
{  
    string str("sjahjdhja"), str1("654sajdhadhj");  
    int compare = str.compare(str1);  
    if (compare > 0)  
    {  
        cout << "str>str1" << endl;  
    }  
    else if(compare == 0)  
    {  
        cout << "str==str1" << endl;  
    }  
    else  
    {  
        cout << "str<str1" << endl;  
    }  
}  

 

Por supuesto, el primer parámetro de la función de miembro de comparación también se puede cambiar a "matriz de caracteres". El prototipo de la función de comparación es el siguiente:

 

Acceso al contenedor de cadenas

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    string str = "shajhajhsjash";  
    cout << str[2] << endl;  // 只读
    str[2] = 'p';  // 写
    cout << str[2] << endl;  
    cout << str.at(4) << endl;  // 只读
    str.at(4) = 'o';  // 写
    cout << str.at(4) << endl;  
}  

 

Vemos que podemos usar [] para acceder a los elementos de tipo char en la cadena como una matriz, y también podemos usar la función de miembro at incorporada para acceder a los elementos de caracteres de tipo char en la clase de cadena, y podemos también use este método de acceso para leer y escribir caracteres específicos.

Inserción y eliminación del contenedor String

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    string str("666777888999"),str1("555");  
    str.insert(3, 3, 'a'); // 在3字符位置插入3个'a'字符  
    str.insert(0, str1); // 在0字符位置插入str1字符串  
    const char ch[] = "sjahja";  
    str.insert(0, ch, 2); // 在0字符位置插入ch字符型数组的前两个元素  
    cout << str << endl;  
  
    cout << str.find('6', 0) << endl;  
    cout << str.rfind('6', str.size()) << endl;  
    str.erase(str.find('6', 0), str.rfind('6', str.size()) - str.find('6', 0) + 1); // 字符串与find/rfind查找函数搭配使用  
    cout << str << endl;  
}  

 

Nota: Aquí, generalmente usamos la función de búsqueda find / rfind junto con la función de insertar / eliminar Debes comprender el uso de la función rfind que deseas encontrar y su valor de retorno.

Extracción de subcadenas de String

#include <iostream>  
using namespace std;  
#include <string>  
  
int main()  
{  
    string str("666777888999"),str1("555");  
    str.insert(3, 3, 'a'); // 在3字符位置插入3个'a'字符  
    str.insert(0, str1); // 在0字符位置插入str1字符串  
    const char ch[] = "sjahja";  
    str.insert(0, ch, 2); // 在0字符位置插入ch字符型数组的前两个元素  
    cout << str << endl;  
  
    cout << str.find('6', 0) << endl;  
    cout << str.rfind('6', str.size()) << endl;  
    str.erase(str.find('6', 0), str.rfind('6', str.size()) - str.find('6', 0) + 1); // 字符串与find/rfind查找函数搭配使用  
    cout << str << endl;  
  
    string str2;  
    str2 = str.substr(str.find('9', 0), str.rfind('9', str.size()) - str.find('9', 0) + 1);   
    // 我们用提取字串的函数搭配find/rfind函数使用就可以提取出我们想要的一段字符  
    cout << str2 << endl;  
}  

 

Cuando generalmente extraemos subcadenas, usamos las funciones de búsqueda find / rfind para lograr que podamos extraer los caracteres que queremos.

Supongo que te gusta

Origin blog.csdn.net/weixin_45590473/article/details/110452785
Recomendado
Clasificación