C++ Cadenas

C++ proporciona los siguientes dos tipos de representación de cadenas:

  • Cadenas de estilo C
  • El tipo de clase string introducido por C++

Cadenas de estilo C

Las cadenas de estilo C se originaron en el lenguaje C y continúan siendo compatibles en C++. Las cadenas son en realidad un array unidimensional de caracteres que usanullun carácter nulo\0como terminación.

La siguiente declaración e inicialización crea unaEJEMPLOcadena. Dado que se almacena un carácter nulo al final del array, el tamaño del array de caracteres es una unidad mayor que elEJEMPLOnúmero de caracteres de la palabra.

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

De acuerdo con las reglas de inicialización de arrays, puede escribir la declaración anterior de la siguiente manera:

char site[] = "EJEMPLO";

La siguiente es la representación en memoria de las cadenas definidas en C/C++:

C/C++ 中的字符串表示

De hecho, no necesita poner elnullcarácter al final de la constante de cadena. El compilador de C++, al inicializar el array, lo pondrá automáticamente\0al final de la cadena.

Ejemplo

#include <iostream> using namespace std; int main () { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; cout << "Tutorial para novatos:"; cout << site << endl; return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Ejemplo: EJEMPLO

C++ tiene una gran cantidad de funciones para manipular cadenas terminadas en null:

No.Función y propósito
1strcpy(s1, s2);
Copia la cadena s2 en la cadena s1.
2strcat(s1, s2);
Concatena la cadena s2 al final de la cadena s1. Las cadenas también se pueden concatenar usando el+signo +, por ejemplo:
string str1 = "ejemplo";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
Devuelve la longitud de la cadena s1.
4strcmp(s1, s2);
Si s1 y s2 son iguales, devuelve 0; si s1<s2, devuelve un valor menor que 0; si s1>s2, devuelve un valor mayor que 0.
5strchr(s1, ch);
Devuelve un puntero a la primera aparición del carácter ch en la cadena s1.
6strstr(s1, s2);
Devuelve un puntero a la primera aparición de la cadena s2 en la cadena s1.

El siguiente ejemplo utiliza algunas de las funciones mencionadas anteriormente:

Ejemplo

#include <iostream> #include <cstring> using namespace std; int main () { char str1[13] = "ejemplo"; char str2[13] = "google"; char str3[13]; int len ; // Copia str1 a str3 strcpy( str3, str1); cout << "strcpy( str3, str1) : " << str3 << endl; // Concatena str1 y str2 strcat( str1, str2); cout << "strcat( str1, str2): " << str1 << endl; // Longitud total de str1 después de la concatenación len = strlen(str1); cout << "strlen(str1) : " << len << endl; return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

strcpy( str3, str1) : ejemplo
strcat( str1, str2): ejemplogoogle
strlen(str1) : 12

La clase String en C++

La biblioteca estándar de C++ proporciona lastringclase string, que admite todas las operaciones anteriores y además añade más funcionalidades. Aprenderemos sobre esta clase en la biblioteca estándar de C++. Ahora veamos primero el siguiente ejemplo:

Ahora quizás todavía no pueda comprender este ejemplo a fondo, porque hasta ahora no hemos hablado de clases y objetos. Por lo tanto, por ahora puede echar un vistazo superficial a este ejemplo, y volver a entenderlo más tarde cuando haya comprendido los conceptos de orientación a objetos.

Ejemplo

#include <iostream> #include <string> using namespace std; int main () { string str1 = "ejemplo"; string str2 = "google"; string str3; int len ; // Copia str1 a str3 str3 = str1; cout << "str3 : " << str3 << endl; // Concatena str1 y str2 str3 = str1 + str2; cout << "str1 + str2 : " << str3 << endl; // Longitud total de str3 después de la concatenación len = str3.size(); cout << "str3.size() : " << len << endl; return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

str3 : ejemplo
str1 + str2 : ejemplogoogle
str3.size() :  12
Otras extensiones