En C++ podemos almacenar strings de una de las dos formas:
- Strings de estilo C
- 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 :
- ¿Cómo invertir rápidamente una string en C++?
- Clase de string de C++ y sus aplicaciones | conjunto 2
- Array de strings en C++
- Convertir string a número y viceversa en C++
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