¿Cómo convertir strings de estilo C a std::string y viceversa?

¿Qué son las strings de estilo C ?
Estas strings son una array de caracteres que terminan con un carácter NULL. Las strings de estilo C se pueden declarar de las siguientes maneras:

Declaración e inicialización

/* To demonstrate C style strings */
#include<iostream>
using namespace std;
int main()
{
    /* Null character has to be added explicitly */
    char str1[8] = {'H' , 'E' , 'L' , 'L' , 'O' ,
                     '-','1','\0' };
      
    /* Compiler implicitly adds Null character */
    char str2[] = "HELLO-2" ;  
   
    /* Compiler implicitly adds Null character. 
       Note that string literals are typically stored
       as read only */
    const char *str3 = "HELLO-3" ;
  
    cout << str1 << endl << str2 << endl << str3;
    return 0;
} 

Producción:

HELLO-1
HELLO-2
HELLO-3

Las strings de estilo C funcionan con funciones muy útiles como strcpy() , strlen() , strpbrk() , strcat() , strstr() ¡y muchas más! (Todas estas funciones son funciones miembro del encabezado ‘ cstring ‘).

¿Qué es un std::string?
La biblioteca estándar de C++ contiene funciones y clases. String es una de sus clases. Aquí tratamos con un objeto de clase de string. Este std::string se cuida solo y administra su propia memoria.

Declaración e inicialización

/* To demonstrate std::string */
#include<iostream>
#include<string>           
  
using namespace std;
int main()
{
    /* s becomes object of class string. */
    string s;  
  
    /* Initializing with a value. */           
    s = "HELLO";
  
    /* Printing the value */          
    cout << s; 
               
    return 0;
}

Producción:

HELLO

Convertir C-String en std::string.
Pero, ¿por qué necesitamos esta transformación? ¿De una string C a una std::string? Es porque

  • Std::string gestiona su propio espacio. Entonces, el programador no necesita preocuparse por la memoria, a diferencia de las strings C (ya que son una array de caracteres)
  • Son fáciles de operar. El operador ‘+’ para concatenación, ‘=’ para asignación, se puede comparar usando operadores regulares.
  • string::find() y muchas otras funciones se pueden implementar en std::string y no en C-Strings, por lo que esto se vuelve útil.
  • Los iteradores se pueden usar en std::string y no en C-strings.

¡Y muchos más! Aquí está el código para ello: –

/* To demonstrate C style string to std::string */
#include<bits/stdc++.h>
  
using namespace std;
int main()
{
    /*Initializing a C-String */
    const char *a = "Testing"; 
    cout << "This is a C-String : "<< a << endl;
  
    /* This is how std::string s is assigned
       though a  C string ‘a’ */
    string s(a);  
     
    /* Now s is a std::string and a is a C-String */
    cout << "This is a std::string : "<< s << endl;
    return 0;
}

Producción:

This is a C-String : Testing
This is a std::string : Testing

La conversión anterior también funciona para la array de caracteres.

        // Character array to std::string conversion 
	char a[] = "Testing"; 
	string s(a); 

Convirtiendo un std::string a un string de estilo C
¿Por qué necesitamos esta transformación? ¿De std::string a una string C?

  • Es porque hay varias funciones poderosas en el encabezado que hacen que nuestro trabajo sea mucho más fácil.
  • atoi() , itoa() , y muchas más funciones funcionan solo con strings C.

¡También puedes pensar en otras razones!
Aquí está el código para la conversión: –

/* To demonstrate std::string to  C style string */
#include<iostream>
#include<string> /* This header contains string class */
using namespace std;
int main()
{
    /* std::string initialized */
    string s = "Testing";  
    cout << "This is a std::string : "<< s << endl;
  
    /* Address of first character of std::string is 
       stored to char pointer a */
    char *a = &(s[0]); 
  
    /* Now 'a' has address of starting character
      of string */
    printf("%s\n", a);                 
    return 0;
}

Producción:

This is a std::string : Testing
This is a C-String : Testing

std::string también tiene una función c_str() que se puede usar para obtener una array de caracteres terminada en nulo.

/* To demonstrate std::string to C style string using
   c_str() */
#include<bits/stdc++.h>
using namespace std;
  
int main()
{
    /* std::string initialized */
    string s = "Testing";  
    cout << "This is a std::string : "<< s << endl;
  
    // c_str returns null terminated array of characters
    const char *a = s.c_str();
  
    /* Now 'a' has address of starting character
      of string */
    printf("%s\n", a);                 
    return 0;
}

Producción:

This is a std::string : Testing
This is a C-String : Testing

Tanto las strings C como std::strings tienen sus propias ventajas. Se debe saber conversión entre ellos, para resolver problemas de manera fácil y efectiva.

Artículos relacionados:

Clase de string C++ y sus aplicaciones | Establecer 1
clase de string C++ y sus aplicaciones | conjunto 2

Este artículo es una contribución de Nishant . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *