Introducción
En este laboratorio, aprenderá sobre cadenas en C++. Aprenderá cómo definir e inicializar cadenas y cómo utilizar funciones de cadena.
Vista previa del contenido
C++ admite dos tipos de cadenas:
- Una cadena es un arreglo de
char, terminado con un carácterNULL'\0'(Hex0). También se le llama Cadena de Caracteres o Cadena de estilo C. - La nueva clase
stringintroducida 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.
- Declaración e inicialización de cadenas
- Entrada/salida de cadenas
- Operación de cadenas
Declaración e inicialización 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
Entrada/salida de cadenas
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:
- Necesitamos "
#include <string>" para usar la clasestring, y "using namespace std" ya questringestá definida en el espacio de nombresstd. - "
cin >> aStr" lee una palabra (delimita por espacio) decin(teclado), y la asigna a la variable de cadenaaStr. getline(cin, aStr)lee toda la línea (hasta'\n') decin, y la asigna aaStr. El carácter'\n'se descarta.- Para limpiar
cin, se puede usar la funciónignore(numeric_limits<streamsize>::max(), '\n')para descartar todos los caracteres hasta'\n'.numeric_limitsestá en el encabezado<limits>.
Operaciones con cadenas
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; // 12Comprobar 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, worldConcatenar 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

Resumen
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.



