Cadenas de C ++

C ++ proporciona los siguientes dos tipos de representaciones de cadenas:

  • La cadena de caracteres de estilo C.
  • El tipo de clase de cadena introducido con Standard C ++.

La cadena de caracteres de estilo C

La cadena de caracteres de estilo C se originó en el lenguaje C y sigue siendo compatible con C ++. Esta cadena es en realidad una matriz unidimensional de caracteres que termina con unnullcarácter '\ 0'. Por lo tanto, una cadena terminada en nulo contiene los caracteres que componen la cadena seguida de unnull.

La siguiente declaración e inicialización crean una cadena que consta de la palabra "Hola". Para contener el carácter nulo al final de la matriz, el tamaño de la matriz de caracteres que contiene la cadena es uno más que el número de caracteres de la palabra "Hola".

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Si sigue la regla de inicialización de la matriz, puede escribir la declaración anterior de la siguiente manera:

char greeting[] = "Hello";

A continuación se muestra la presentación en memoria de la cadena definida anteriormente en C / C ++ -

En realidad, no coloca el carácter nulo al final de una constante de cadena. El compilador de C ++ coloca automáticamente el '\ 0' al final de la cadena cuando inicializa la matriz. Intentemos imprimir la cadena mencionada anteriormente:

#include <iostream>

using namespace std;

int main () {

   char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

   cout << "Greeting message: ";
   cout << greeting << endl;

   return 0;
}

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

Greeting message: Hello

C ++ admite una amplia gama de funciones que manipulan cadenas terminadas en nulo:

No Señor Función y propósito
1

strcpy(s1, s2);

Copia la cadena s2 en la cadena s1.

2

strcat(s1, s2);

Concatena la cadena s2 al final de la cadena s1.

3

strlen(s1);

Devuelve la longitud de la cadena s1.

4

strcmp(s1, s2);

Devuelve 0 si s1 y s2 son iguales; menor que 0 si s1 <s2; mayor que 0 si s1> s2.

5

strchr(s1, ch);

Devuelve un puntero a la primera aparición del carácter ch en la cadena s1.

6

strstr(s1, s2);

Devuelve un puntero a la primera aparición de la cadena s2 en la cadena s1.

El siguiente ejemplo hace uso de algunas de las funciones mencionadas anteriormente:

#include <iostream>
#include <cstring>

using namespace std;

int main () {

   char str1[10] = "Hello";
   char str2[10] = "World";
   char str3[10];
   int  len ;

   // copy str1 into str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;

   // concatenates str1 and str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;

   // total lenghth of str1 after concatenation
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;

   return 0;
}

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

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

La clase String en C ++

La biblioteca estándar de C ++ proporciona una stringtipo de clase que admite todas las operaciones mencionadas anteriormente, además de mucha más funcionalidad. Veamos el siguiente ejemplo:

#include <iostream>
#include <string>

using namespace std;

int main () {

   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;

   // copy str1 into str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;

   // concatenates str1 and str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;

   // total length of str3 after concatenation
   len = str3.size();
   cout << "str3.size() :  " << len << endl;

   return 0;
}

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

str3 : Hello
str1 + str2 : HelloWorld
str3.size() :  10