0% encontró este documento útil (0 votos)
30 vistas17 páginas

Cadenas de Caracteres en C/C++

Este documento introduce el concepto de cadena de caracteres en C++. Explica que las cadenas se almacenan como vectores de tipo char y que la librería string proporciona funciones para manipular cadenas de forma más sencilla. Algunas funciones clave incluyen strcpy para copiar cadenas, strcat para concatenar, strlen para obtener la longitud y find para buscar subcadenas.

Cargado por

sebastian.vega.g
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
30 vistas17 páginas

Cadenas de Caracteres en C/C++

Este documento introduce el concepto de cadena de caracteres en C++. Explica que las cadenas se almacenan como vectores de tipo char y que la librería string proporciona funciones para manipular cadenas de forma más sencilla. Algunas funciones clave incluyen strcpy para copiar cadenas, strcat para concatenar, strlen para obtener la longitud y find para buscar subcadenas.

Cargado por

sebastian.vega.g
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introducción a la computación

Clase 10
Cadena de caracteres

Prof. Marcos Alania


[email protected]

Lima, 22 Agosto, 2020


Cadena de caracteres

➢ El tipo de dato cadena no existe en C/C++


➢ Para manipular cadena de caracteres utilizamos un vector del tipo char
o string
Declaración
char nombre_cadena[longitud]

Nota
Hay que tener cuidado al definir el vector para la cadena de caracteres, ya que esto
puede conllevar a cometer errores

char cadena_caracteres[5] = {‘a',‘e',‘i',‘o',‘u'};


char cadena_caracteres[5] = "maria";

Aparentemente ambos hacen lo mismo, pero el problema viene en el espacio que se


reserva en la memoria. El primer caso esta bien definido, en el segundo caso no.

2
Cadena de caracteres
Primer caso

3
Cadena de caracteres

C++ no acepta una cadena de caracteres como elemento de un arreglo.

Segundo caso
char cadena_caracteres[] = "maria";

En este caso C++ separa un carácter para la secuencia de escape \0, se llama
carácter nulo
m a r i a \0

La definición correcta seria de la forma:

char cadena_caracteres[6] = "maria";

4
Cadena de caracteres: Operaciones Básicas
Librería cstring

strcpy(s1, s2); Copia la cadena s2 a la cadena s1

strcat(s1, s2); Concatena la cadena s2 al final de la cadena s1

strlen(s1); Retorna la longitud de la cadena s1

strcmp(s1, s2); Retorna 0 si s1 y s2 son iguales ; menor que 0 si s1<s2 ;


mayor que 0 si s1>s2

strchr(s1, ch); Retorna un puntero a la primera aparición de el carácter ch


en la cadena s1

strstr(s1, s2); Retorna un puntero la primera aparición de la cadena s2 en


la cadena s1

5
Cadena de caracteres: Operaciones Básicas
#include <iostream>
#include <cstring>
La librería cstring - es
using namespace std; la version C++ de la
int main () {
librería string.h
char str1[14] = "Maxima";
char str2[14] = "Determinacion";
char str3[14];
int len ;

// copia str1 a str3


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

// concatena str1 y str2


strcat( str1, str2);
strcpy( str3, str1) : Maxima
cout << "strcat( str1, str2): " << str1 << endl;
strcat( str1, str2): MaximaDeterminacion
strlen(str1) : 19
// La longitud total de str1 despues de la concatenacion
len = strlen(str1);
cout << "strlen(str1) : " << len << endl;

return 0;
}

6
Cadena de caracteres: Operaciones Básicas

#include <iostream>
#include <cstring>
using namespace std;
int main () {
string str1 = "Maxima";
string str2 = "Determinacion";
string str3;
int len ;

// copia str1 a str3


str3 = str1; str3: Maxima
cout << "str3 : " << str3 << endl;
str1+str2:MaximaDeterminacion
// concatena str1 y str2 str3.size(): 19
str3=str1+ str2;
cout << "str1 + str2: " << str3 << endl;

/* La longitud total de str3 despues de la


concatenacion */
len = str3.size();
cout << "str3.size(): " << len << endl;
return 0;
}

7
Cadena de caracteres: Operaciones Básicas
// Inicializacion por cadena
string str1("Primera_Cadena");

// Inicializacion por otra cadena


string str2(str1);

// Inicializacion por caracter con un número de apariciones


string str3(5, '#');

// Inicializacion por una parte de otra cadena


string str4(str1, 7, 6); // desde 7 mo indice (2do parametro)
// 6 caracteres (3er parametro)

// Inicializacion por parte de otra cadena : iterator version


string str5(str2.begin(), str2.begin() + 7);

cout << "str1: " << str1 << endl;


cout << "str2: " << str2 << endl;
cout << "str3: " << str3 << endl; str1: Primera_Cadena
cout << "str4: " << str4 << endl; str2: Primera_Cadena
cout << "str5: " << str5 << endl;
str3: #####
str4: _Caden
str5: Primera

8
Cadena de caracteres: Buscando caracteres
// la funcion clear borra todos los caracteres de la cadena
str4.clear();

// las funciones size() and length() retornan la longitud de la cadena


int len = str6.length(); // igual que "len = str6.size();"
cout << "str6: " << str6 << endl;
cout << "la longitud de la cadena str6 es : " << len << endl;

// un caracter se puede acceder utilizando - at


char ch = str6.at(2); // Igual que "ch = str6[2];"
cout << "El tercer caracter de la cadena str6 es : " << ch << endl;

// front retorna el primer caracter y back retorna el ultimo caracter


// de la cadena
char ch_f = str6.front(); // Igual que : "ch_f = str6[0];"
char ch_b = str6.back(); // Igual que : "ch_b = str6[str6.length() - 1];"

str6: _Caden
la longitud de la cadena str6 es : 6

El tercer caracter de la cadena str6 es : a

El Primer caracter de str6 es : _


El ultimo caracter es: n
9
Cadena de caracteres: Trabajando con sub-cadenas

cout << "str6: " << str6 << endl;


// append - agregar la cadena argumento al final
str6.append(" extension"); // Igual que str6 += " extension"

// otra version de append, agrega parte de otra cadena


str4.append(str6, 0, 6); // en la posicion 0, 6 caracteres
cout << "str6: " << str6 << endl;
cout << "str4: " << str4 << endl;

// find retorna el indice donde se encuentra el patron.


// si el patron no se encuentra retorna la constante npos que vale -1
if (str6.find(str4) != string::npos)
cout << "str4 se encontro en str6 en la posicion " << str6.find(str4) << endl;
else
cout << "str4 no se encontro str6" << endl;

str6: _Caden
str6: _Caden extension
str4: _Caden
str4 se encontro en str6 en la posicion 0

10
Cadena de caracteres: Trabajando con sub-cadenas
// La funcion substr(a, b) retorna una subcadena de longitud b
// empezando desde el indice a
cout << "str6.substr(7, 3) : " << str6.substr(7, 3) << endl;
//si no se pasa el segundo argumento se sobreentiende hasta el final
cout << "str6.substr(7) : " << str6.substr(7) << endl;
// erase(a, b) borra b caracteres en el indice a
str6.erase(7, 4);
cout << "str6.erase(7, 4) " << str6 << endl;
// la version iterator de erase
str6.erase(str6.begin() + 5, str6.end() - 3);
cout << " str6.erase(str6.begin() + 5, str6.end() - 3) :" << str6 <<
endl;

str6: _Caden extension


str6.substr(7, 3) : ext
str6.substr(7) : extension
str6.erase(7, 4);_Caden nsion
str6.erase(str6.begin() + 5, str6.end() - 3) :_Cadeion

11
Cadena de caracteres: Trabajando con sub-cadenas

// Busca si la cadena tiene una parte flotante


string fnum = "23.342";
string str;
int fpart;

int pos = fnum.find(".");


if (pos == string::npos)
cout << "Numero no tiene parte flotante"<< endl;
else
cout << "La parte flotante es : " <<fnum.substr(pos + 1) << endl;

La parte flotante es : 342

12
Cadena de caracteres: Trabajando con sub-cadenas
// Busca si la cadena contiene sólo digitos
string num = "34A52";
int l = num.length();
bool solodigitos = true;
for (int i = 0; i < l; i++)
{
if (num.at(i) < '0' || num.at(i) > '9'){
cout << "La cadena NO contiene solamente digitos" << endl;
solodigitos = false;
}
}
// si la cadena tiene solo digitos
if (solodigitos)
cout << "La cadena SI contiene solamente digitos" << endl;

La cadena NO contiene solamente digitos

13
Cadena de caracteres: Trabajando con sub-cadenas

// Reemplaza los espacios en blanco por %20 - como se usa en las URL
string urlex = "google com in";
string replaceby = "%20";
int n = 0;

// Hacer un ciclo hasta que todos los espacios son reemplazados


while ((n = urlex.find(" ", n)) != string::npos )
{
urlex.replace(n, 1, replaceby);
n += replaceby.length();
}

cout << "URL con espacios reemplazados: " << urlex << endl;

URL con espacios reemplazados: google%20com%20in

14
Cadena de caracteres
Cadena de caracteres usando la librería string

15
Cadena de caracteres
Cadena de caracteres usando la librería string

16
Cadena de caracteres: Librería string

Resumen de algunas funciones de la librería string

● append(): esta función agrega una parte de una cadena a otra cadena
● assign():esta función asigna una cadena parcial
● at(): esta función obtiene el carácter almacenado en una ubicación específica
● begin(): esta función devuelve una referencia al inicio de la cadena
● capacity(): esta función da el espacio en memoria reservado
● compare(): esta función compara una cadena con otra
● empty(): esta función devuelve verdadero si la cadena está vacía
● end(): esta función devuelve una referencia al final de la cadena
● erase(): esta función elimina el (los) carácter(es) especificado(s)
● find(): esta función busca la ocurrencia de una subcadena especificada
● length():da el tamaño de una cadena o el número de elementos de una
cadena
● swap(): esta función intercambia la cadena dada con la que invoca

17

También podría gustarte