Comparación de cadenas y caracteres en C++

Muhammad Husnain 11 diciembre 2023
  1. Crear una matriz de caracteres en C++
  2. Usar la biblioteca String en C++
  3. Comparación de cadenas con Char en C++
Comparación de cadenas y caracteres en C++

Esta guía trivial trata sobre el uso de cadenas en C++ y cómo se comparan estas cadenas con otros literales. Antes de continuar, presentaremos brevemente las cadenas en C++.

En C++, las cadenas se pueden categorizar de dos maneras diferentes:

  1. Cree una matriz de Carácter para formar una cadena
  2. Utilice la biblioteca estándar String en C++

Crear una matriz de caracteres en C++

Al igual que en el lenguaje C, C++ también nos proporciona matrices de caracteres, es decir, la matriz char, que se puede usar como una cadena literal. Es una matriz unidimensional de caracteres terminados en un null.

Entonces, la cadena se crea formando una matriz char y terminándola con un carácter null.

Tenga en cuenta que para imprimir una matriz de caracteres utilizando un método agregado (p. ej., cout<< charArray), un carácter null debe terminar la matriz de caracteres. C++ usa \0 como un carácter NULL, y ayuda a los métodos agregados a detectar el final de la cadena de caracteres (es imposible detectar el final de una matriz sin algún símbolo que marque el final).

Por lo tanto, el siguiente ejemplo declara una matriz de caracteres de tamaño 11 aunque el “lenguaje C” contiene solo diez caracteres.

char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};

La declaración anterior también se puede escribir de la siguiente manera, siempre que siga las reglas de inicialización.

char word[] = "C-language";

Si olvida poner el carácter null al final, el compilador coloca implícitamente el carácter null al final mismo. Echemos un vistazo al programa a continuación.

#include <iostream>
using namespace std;

int main() {
  char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
  cout << "First message: ";
  cout << word << endl;
  return 0;
}

La línea n.° 06 en el fragmento de código anterior contribuirá con Primer mensaje: a la salida, mientras que la línea n.° 07 mostrará todos los caracteres en la variable word hasta encontrar un \0. Por lo tanto, el fragmento de código anterior generará el siguiente resultado.

First Message: C-language

Usar la biblioteca String en C++

C++ tiene un archivo de encabezado string.h incorporado como parte de su biblioteca estándar. Proporciona un paquete de funcionalidades (por ejemplo, strcpy, strlen, etc.) para trabajar con cadenas de estilo C (es decir, cadenas terminadas en cero).

Tenga en cuenta que toda la biblioteca moderna de string incluida sin .h es diferente de string.h. La biblioteca de clases string es una biblioteca de C++ para manipular cadenas modernas de C++, mientras que string.h es un archivo de encabezado C para manipular cadenas de estilo C (es decir, cadenas terminadas en nulo).

Veamos el siguiente código para comprender la biblioteca string.h.

#include <string.h>

#include <iostream>
using namespace std;

int main() {
  char country[] = "Pakistan";
  char countryTemp[50] = "abc";

  cout << "countryTemp length before initializing is:";
  cout << strlen(countryTemp) << endl;

  // strcpy()
  cout << "Let's copy country to countryTemp" << endl;
  strcpy(countryTemp, country);
  cout << "countryTemp=" << countryTemp << endl;

  cout << "countryTemp length after copying country is:";
  cout << strlen(countryTemp) << endl;

  return 0;
}

El programa anterior primero declara dos matrices de caracteres (cadenas C) e inicializa la primera con Pakistan. La línea #10 imprime la longitud de countryTemp, que es 3.

Aunque el tamaño total de countryTemp es de 50 bytes, strcpy solo puede calcular el tamaño en función del carácter NULL (colocado en el cuarto byte de la matriz). Por tanto, strcpy devuelve 3.

La línea #14 usa la función strcpy para copiar el contenido de la matriz country a countryTemp. Por lo tanto, la nueva longitud de countryTemp se convierte en 8.

Producción :

countryTemp length before initializing is:3
Let's copy country to countryTemp
countryTemp=Pakistan
countryTemp length after copying country is:8

Nota: Hay numerosas funciones provistas por el archivo de encabezado string.h para cadenas terminadas en NULL (también conocidas como cadenas de estilo C). Se pueden encontrar más funciones de biblioteca disponibles aquí.

Comparación de cadenas con Char en C++

Es un problema común para las personas comparar cadenas con constantes de caracteres. Esto es prácticamente imposible.

Considere el siguiente código.

#include <iostream>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  char inp;
  cin >> inp;
  if (inp == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

Aquí, en esta función, hemos realizado una entrada del usuario, que es una variable char, y en la condición if, la comparamos con una cadena literal encerrada entre comillas dobles. Este código generará un error de error: ISO C++ forbids comparison between pointer and integer.

Se recomienda tomar la entrada en la variable string en lugar de la variable char para evitar este error.

#include <iostream>
#include <string>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  string ans;
  cin >> ans;
  if (ans == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

Producción :

Do you want to proceed (y or n)?
n
Good Bye
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Artículo relacionado - C++ String