Introducción
En este laboratorio, aprenderá sobre cadenas en C++. Aprenderá cómo definir e inicializar cadenas y cómo utilizar funciones de cadena.
En este laboratorio, aprenderá sobre cadenas en C++. Aprenderá cómo definir e inicializar cadenas y cómo utilizar funciones de cadena.
C++ admite dos tipos de cadenas:
char, terminado con un carácter NULL '\0' (Hex 0). También se le llama Cadena de Caracteres o Cadena de estilo C.string introducida en C++98.Se recomienda la clase string "de alto nivel", porque es mucho más fácil de usar y entender. Sin embargo, muchos programas legados utilizan cadenas de C; muchos programadores también utilizan cadenas de C "de bajo nivel" para tener un control total y una mayor eficiencia; además, en algunas situaciones, como los argumentos de línea de comandos, solo se admiten cadenas de C. Por lo tanto, es posible que tenga que entender ambos tipos de cadenas.
Para utilizar la clase string, incluya el encabezado <string> y "using namespace std".
Puede declarar e inicializar una cadena con un literal de cadena, inicializarla a una cadena vacía o inicializarla con otro objeto de cadena. Por ejemplo:
#include <string>
using namespace std;
string str1("Hello"); // Inicializar con un literal de cadena (Inicialización implícita)
string str2 = "world"; // Inicializar con un literal de cadena (Inicialización explícita a través del operador de asignación)
string str3; // Inicializar a una cadena vacía
string str4(str1); // Inicializar copiando de un objeto de cadena existente
Por ejemplo
/* Prueba de la entrada y salida de la clase string */
#include <iostream>
#include <string> // Se necesita este encabezado para usar la clase string
#include <limits>
using namespace std; // También se necesita para <string>
int main() {
string message("Hello");
cout << message << endl;
// Ingresa una palabra (delimita por espacio) en una cadena
cout << "Ingrese un mensaje (sin espacios): ";
cin >> message;
cout << message << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// Limpia cin hasta el salto de línea (se necesita el encabezado <limits>)
// Ingresa una línea en una cadena
cout << "Ingrese un mensaje (con espacios): ";
getline(cin, message); // Lee la entrada de cin en message
cout << message << endl;
return 0;
}
Salida:
Hello
Ingrese un mensaje (sin espacios): hello
hello
Ingrese un mensaje (con espacios): hello world
hello world

NOTAS:
#include <string>" para usar la clase string, y "using namespace std" ya que string está definida en el espacio de nombres std.cin >> aStr" lee una palabra (delimita por espacio) de cin (teclado), y la asigna a la variable de cadena aStr.getline(cin, aStr) lee toda la línea (hasta '\n') de cin, y la asigna a aStr. El carácter '\n' se descarta.cin, se puede usar la función ignore(numeric_limits<streamsize>::max(), '\n') para descartar todos los caracteres hasta '\n'. numeric_limits está en el encabezado <limits>.Verificar la longitud de una cadena:
string str("Hello, world");
// Ambos devuelven la longitud de la cadena
cout << str.length() << endl; // 12
cout << str.size() << endl; // 12
Comprobar si una cadena está vacía:
string str1("Hello, world");
string str2; // Cadena vacía
// Comprueba si la cadena está vacía.
cout << str1.empty() << endl; // 0 (falso)
cout << str2.empty() << endl; // 1 (verdadero)
Copiar de otra cadena: Simplemente use el operador de asignación "=".
string str1("Hello, world"), str2;
str2 = str1;
cout << str2 << endl; // Hello, world
Concatenar con otra cadena: Use el operador más "+", o el operador compuesto más "+=".
string str1("Hello,");
string str2(" world");
cout << str1 + str2 << endl; // "Hello, world"
cout << str1 << endl; // "Hello,"
cout << str2 << endl; // " world"
str1 += str2;
cout << str1 << endl; // "Hello, world"
cout << str2 << endl; // " world"
string str3 = str1 + str2;
cout << str3 << endl; // "Hello, world world"
str3 += "again";
cout << str3 << endl; // "Hello, world worldagain"
Leer/Escribir un carácter individual de una cadena:
string str("Hello, world");
// Devuelve el carácter en el índice, el índice comienza en 0. Realiza una comprobación de límite de índice.
cout << str.at(0) << endl; // 'H'
cout << str[1] << endl; // 'e'
cout << str.at(str.length() - 1) << endl; // 'd'
str.at(1) = 'a'; // Escribe en el índice 1
cout << str << endl; // "Hallo, world"
str[0] = 'h';
cout << str << endl; // "hallo, world"
Extraer sub-cadena:
string str("Hello, world");
// Devuelve la sub-cadena que comienza en beginIndex, de tamaño
cout << str.substr(2, 6) << endl; // "llo, w"
Comparar con otra cadena:
string str1("Hello"), str2("Hallo"), str3("hello"), str4("Hello");
cout << str1.compare(str2) << endl; // 1 'e' > 'a'
cout << str1.compare(str3) << endl; // -1 'h' < 'H'
cout << str1.compare(str4) << endl; // 0
// También puede usar el operador == o!=
if (str1 == str2) cout << "Same" << endl;
if (str3!= str4) cout << "Different" << endl;
cout << boolalpha; // imprime bool como true/false
cout << (str1!= str2) << endl;
cout << (str1 == str4) << endl;
Buscar/Sustituir caracteres: Puede usar las funciones disponibles en #include <algorithm>
Por ejemplo,
#include <algorithm>
......
string str("Hello, world");
replace(str.begin(), str.end(), 'l', '_');
cout << str << endl; // He__o, wor_d
Ejemplo
/* Ejemplo de función de cadena en C++ */
#include <iostream>
#include <string> // usar la clase string
using namespace std;
int main() {
string msg = "hello, world!";
cout << msg << endl;
cout << msg.length() << endl; // longitud de la cadena
cout << msg.at(1) << endl; // carácter en el índice 1
cout << msg[1] << endl; // lo mismo que arriba
cout << msg.empty() << endl; // probar si la cadena está vacía
cout << msg.substr(3, 3) << endl; // sub-cadena comienza en
// pos 3 de tamaño 3
cout << msg.replace(3, 3, "why") << endl; // reemplazar sub-cadena
cout << msg.append("end") << endl; // agregar al final
cout << msg + "end" << endl; // lo mismo que arriba
cout << msg.insert(3, "insert") << endl; // insertar después de la pos 3
string msg1;
msg1 = msg; // copiar
cout << msg1 << endl;
cout << "Enter a line: ";
getline(cin, msg); // leer una línea de entrada
cout << msg << endl;
}
Salida:
hello, world!
13
e
e
0
lo,
helwhy world!
helwhy world!end
helwhy world!endend
helinsertwhy world!end
helinsertwhy world!end
Enter a line: a
a

La cadena es otro tipo de datos importante aparte de los números. En esta sección, hablamos sobre el uso de cadenas. C++ ofrece muchos métodos útiles para manejar cadenas, aprende a usarlos con facilidad.