// Programa que demuestra varias funciones C++ de cadenas
#include <iostream>
using namespace std;
int main()
{
// Inicializacion por cadena
string str1("Primera_Cadena");
// Inicializacion por otra cadena
string str2(str1);
// Inicializacion por caracter con un número de apariciones
string str3(5, '#');
// Inicializacion por una parte de otra cadena
string str4(str1, 7, 6); // desde 7 mo indice (2do parametro)
// 6 caracteres (3er parametro)
// Inicializacion por parte de otra cadena : iteartor version
string str5(str2.begin(), str2.begin() + 7);
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
cout << "str3: " << str3 << endl;
cout << "str4: " << str4 << endl;
cout << "str5: " << str5 << endl;
// Operador de asignacion
string str6 = str4;
// la funcion clear borra todos los characteres de la cadena
str4.clear();
// las funciones size() and length() retornan la longitud de la cadena
int len = str6.length(); // igual que "len = str6.size();"
cout << "str6: " << str6 << endl;
cout << "la longitud de la cadena str6 es : " << len << endl;
// un caracter se puede acceder utilizando - at /
char ch = str6.at(2); // Igual que "ch = str6[2];"
cout << "El tercer caracter de la cadena str6 es : " << ch << endl;
// front retorna el primer caracter y back retorna el ultimo caracter
// de la cadena
char ch_f = str6.front(); // Igual que "ch_f = str6[0];"
char ch_b = str6.back(); // Igual que :
// "ch_b = str6[str6.length() - 1];"
cout << "El Primer caracter de str6 es : " << ch_f << ", El ultimo caracter es: "
<< ch_b << endl;
// c_str retorna la version tipo arreglo de caracteres finalizados en '\0' de la cadena
const char* charstr = str6.c_str();
printf("%s\n", charstr);
// append - agregar la cadena argumento al final
str6.append(" extension"); // Igual que str6 += " extension"
// otra version de append, agrega parte de otra cadena
str4.append(str6, 0, 6); // en la position 0, 6 caracteres
cout << "str6: " << str6 << endl;
cout << "str4: " << str4 << endl;
// find retorna el indice donde se encuentra el patron.
// si el patron no se encuentra retorna la constante predefinida
// npos que vale -1
if (str6.find(str4) != string::npos)
cout << "str4 se encontro en str6 en la posicion " << str6.find(str4) << endl;
else
cout << "str4 no se encontro str6" << endl;
// La funcion substr(a, b) retorna una subcadena de longitud b
// empezando desde el incide a
cout << "str6.substr(7, 3) : " << str6.substr(7, 3) << endl;
// si no se pasa el segundo argumento se sobreentiende hasta el final
cout << "str6.substr(7) : " << str6.substr(7) << endl;
// erase(a, b) borra b caracteres en el indice a
str6.erase(7, 4);
cout << "str6.erase(7, 4) " << str6 << endl;
// la version iterator de erase
str6.erase(str6.begin() + 5, str6.end() - 3);
cout << " str6.erase(str6.begin() + 5, str6.end() - 3) :" << str6 << endl;
string str7 = "Este es un ejemplo";
cout << "str7: " << str7 << endl;
// replace(a, b, str) cambia b caracteres desde el indice a index b con str
str7.replace(3, 10 , "os eran un");
cout << "str7.replace(3, 10 , 'os eran un')" << str7 << endl;
return 0;
}