¿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