Clase de string C++ y sus aplicaciones

En C++ podemos almacenar strings de una de las dos formas:

  1. Strings de estilo C
  2. clase de string (discutido en esta publicación)

En esta publicación, se analiza el segundo método. La clase de string es parte de la biblioteca de C++ que admite muchas funciones sobre las strings de estilo C.
La clase de string de C++ utiliza internamente una array de caracteres para almacenar caracteres, pero toda la administración de memoria, la asignación y la terminación nula son manejadas por la propia clase de string, por eso es fácil de usar. La longitud de la string C++ se puede cambiar en tiempo de ejecución debido a la asignación dinámica de memoria similar a los vectores. Como la clase de string es una clase contenedora, podemos iterar sobre todos sus caracteres usando un iterador similar a otros contenedores como vector, set y maps, pero generalmente usamos un bucle for simple para iterar sobre los caracteres e indexarlos usando [] operador.
La clase de string C++ tiene muchas funciones para manejar strings fácilmente. Los más útiles se muestran en el siguiente código.

// C++ program to demonstrate various function string class
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // various constructor of string class
  
    // initialization by raw string
    string str1("first string");
  
    // initialization by another string
    string str2(str1);
  
    // initialization by character with number of occurrence
    string str3(5, '#');
  
    // initialization by part of another string
    string str4(str1, 6, 6); //    from 6th index (second parameter)
                             // 6 characters (third parameter)
  
    // initialization by part of another string : iterator version
    string str5(str2.begin(), str2.begin() + 5);
  
    cout << str1 << endl;
    cout << str2 << endl;
    cout << str3 << endl;
    cout << str4 << endl;
    cout << str5 << endl;
  
    //  assignment operator
    string str6 = str4;
  
    // clear function deletes all character from string
    str4.clear();
  
    //  both size() and length() return length of string and
    //  they work as synonyms
    int len = str6.length(); // Same as "len = str6.size();"
  
    cout << "Length of string is : " << len << endl;
  
    // a particular character can be accessed using at /
    // [] operator
    char ch = str6.at(2); //  Same as "ch = str6[2];"
  
  
    cout << "third character of string is : " << ch << endl;
  
    //  front return first character and back returns last character
    //  of string
  
    char ch_f = str6.front();  // Same as "ch_f = str6[0];"
    char ch_b = str6.back();   // Same as below
                               // "ch_b = str6[str6.length() - 1];"
  
    cout << "First char is : " << ch_f << ", Last char is : "
         << ch_b << endl;
  
    // c_str returns null terminated char array version of string
    const char* charstr = str6.c_str();
    printf("%s\n", charstr);
  
    // append add the argument string at the end
    str6.append(" extension");
    //  same as str6 += " extension"
  
    // another version of append, which appends part of other
    // string
    str4.append(str6, 0, 6);  // at 0th position 6 character
  
    cout << str6 << endl;
    cout << str4 << endl;
  
    //  find returns index where pattern is found.
    //  If pattern is not there it returns predefined
    //  constant npos whose value is -1
  
    if (str6.find(str4) != string::npos)
        cout << "str4 found in str6 at " << str6.find(str4)
             << " pos" << endl;
    else
        cout << "str4 not found in str6" << endl;
  
    //  substr(a, b) function returns a substring of b length
    //  starting from index a
    cout << str6.substr(7, 3) << endl;
  
    //  if second argument is not passed, string till end is
    // taken as substring
    cout << str6.substr(7) << endl;
  
    //  erase(a, b) deletes b characters at index a
    str6.erase(7, 4);
    cout << str6 << endl;
  
    //  iterator version of erase
    str6.erase(str6.begin() + 5, str6.end() - 3);
    cout << str6 << endl;
  
    str6 = "This is a examples";
  
    //  replace(a, b, str)  replaces b characters from a index by str
    str6.replace(2, 7, "ese are test");
  
    cout << str6 << endl;
  
    return 0;
}

Producción :

first string
first string
#####
string
first
Length of string is : 6
third character of string is : r
First char is : s, Last char is : g
string
string extension
string
str4 found in str6 at 0 pos
ext
extension
string nsion
strinion
These are test examples

Como se ve en el código anterior, podemos obtener la longitud de la string por size() así como también por length() pero se prefiere length() para las strings. Podemos concatenar una string con otra string mediante += o mediante append(), pero += es un poco más lento que append() porque cada vez que se llama a + se realiza una nueva string (creación de un nuevo búfer) que se devuelve que es un sobrecarga de bits en caso de muchas operaciones de adición.

Aplicaciones:
Sobre la base de la función de string anterior, algunas aplicaciones se escriben a continuación:

// C++ program to demonstrate uses of some string function
#include <bits/stdc++.h>
using namespace std;
  
// this function returns floating point part of a number-string
string returnFloatingPart(string str)
{
    int pos = str.find(".");
    if (pos == string::npos)
        return "";
    else
        return str.substr(pos + 1);
}
  
// This function checks whether a string contains all digit or not
bool containsOnlyDigit(string str)
{
    int l = str.length();
    for (int i = 0; i < l; i++)
    {
        if (str.at(i) < '0' || str.at(i) > '9')
            return false;
    }
    //  if we reach here all character are digits
    return true;
}
  
// this function replaces all single space by %20
// Used in URLS
string replaceBlankWith20(string str)
{
    string replaceby = "%20";
    int n = 0;
  
    // loop till all space are replaced
    while ((n = str.find(" ", n)) != string::npos )
    {
        str.replace(n, 1, replaceby);
        n += replaceby.length();
    }
    return str;
}
  
// driver function to check above methods
int main()
{
    string fnum = "23.342";
    cout << "Floating part is : " << returnFloatingPart(fnum) 
         << endl;
  
    string num = "3452";
    if (containsOnlyDigit(num))
        cout << "string contains only digit" << endl;
  
    string urlex = "google com in";
    cout << replaceBlankWith20(urlex) << endl;
  
    return 0;      
}

Producción :

Floating part is : 342
string contains only digit
google%20com%20in

Artículos relacionados :

Este artículo es una contribución de Utkarsh Trivedi. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *