Está en la página 1de 15

String

Carlos Joa
Abril 2014

Agenda
String en C
String en C++

String en C
C no tiene una estructura de datos para representar string
En su lugar, usa arreglo de caracteres terminado en null
Si usas arreglo esttico, su tamao es fijo
Si usas memoria dinmica, debes liberarlo cuando ya no lo
necesites
El header string.h contiene funciones con nombres raros para
trabajar con strings
Algunas de esas operaciones son ineficientes
Ejemplo: strlen() recorre el string para contar la cantidad de
caracteres presente en el string

Headers y Declaracin en C
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
// En C++, usa los headers cstdio, cstring, cctype, cstdlib
// declarar dos arreglos de size 1000; asumimos que 1000 es suficiente
// declaren estos arreglos como variables globales
char S[1000], T[1000];
char *p; // puntero

Inicializacion / Destruccion en C
// Las variables globales se inicializan con byte 0
// Si quieres inicializar arreglos locales
memset(S, 0, sizeof(S)); // llena el arreglo esttico del byte 0
S[0] = \0;
// forma eficiente de inicializar un string vacio
p = S;
// p es puntero que apunta al inicio del arreglo S
p = (char*) malloc(1000); // puntero a arreglo de 1000 bytes
free(p);
// libera la memoria asignada previamente
p = new char[1000]; // mejor manera de alocar memoria en C++
delete[] p; // libera memoria en C++
// free(S); los arreglos estticos no se liberan

Input/Output y Parsing en C
scanf(%s, S); // leemos un string
gets(S);
// leemos una linea completa
printf(%s\n, S ); // imprime string con newline; equivalente a puts(S)
int N = atoi(S);
// convierte S a numero entero
N = strtol(S, NULL, 10); // equivalente
sscanf(S, %d, &N); // otra manera de extraer un numero de un string
sprintf(S, cantidad: %d, N); // escribe a un string, en vez de la consola
p = strtok(S, ); // rompe string en pedazos separados por espacio
while (p != NULL) { p = strtok(NULL, ); } // itera sobre cada pedazo

Operaciones en C
if ( a <= S[0] && S[0] <= z ) puts(Empieza con minuscula);
if ( islower( S[0] ) ) puts(Empieza con minscula); // lo mismo
S[0] = toupper( S[0] ); // convierte a mayscula
int i;
for (i = 0; i < strlen(S); i++) { S[i] = tolower(S[i]); } // no hagan esto
for (i = 0; S[i] != \0; i++) { S[i] = tolower(S[i]); } // mucho mejor
char* p = S; // punteros y arreglos son equivalentes
for (; *p != \0; p++) { *p = tolower( *p ); }

Operaciones en C
p = strchr(S, a); // busca la letra a; devuelve puntero a la posicion o NULL
p = strrchr(S, a); // busqueda en reverso
p = strstr(S, abc); // busca un substring
strcat(S, !!!); // concatena string; cuidado con el tamao de S
strcpy(T, S);
// copia string a otro
// strncat y strncpy tienen un parmetro adicional para indicar tamao maximo
int cmp = strcmp(S, xxx));
// devuelve 0 si son iguales, -1 si S es menor que xxx, +1 si es mayor

String en C++

STL provee estructura string que contiene


mtodos ms descriptivos
Puedes tratar los strings de manera similar a
arreglos de caracteres
A diferencia de Java y C#, los strings de C++ son
mutables (equivalente a StringBuilder)

Headers y Declaracin en C++


#include <iostream>
#include <cstdio>
#include <string>
// #include <cstring>
#include <cctype>
#include <cstdlib>
#include <sstream>
using namespace std;
string S;
// declarar string S, inicialmente vacio;
string T = HOla Mundo; // inicializa con un char*
string R(5, a);
// string inicializado con aaaaa

Input/Output y Parsing en C++


cin >> S; // leemos un string
getline(cin, S); // leemos una linea completa
cout << S << endl; // imprime string, seguido de newline
puts( S.c_str() );
// imprime usando puts de C
int N;
stringstream ss(S); // abstraccion para tratar string S como un stream
ss >> N;
// lee del stream
ss << cantidad: << N; // escribe al stream
S = ss.str(); // extrae el string

Operaciones en C++
S = T + Mundo; // concatena dos strings
S += !!!; // contatena a si mismo
T[1] = tolower(T[1]); // modifica la letra en la posicion 1
cout << S.size() << endl; // length() es equivalente
if (S.empty()) cout << string S esta vacio << endl;
If (S == ABC) cout << Iguales << endl;
If (S < GGG) cout << Menor << endl;

Operaciones en C++
// Extrae substring de 3 letras desde la posicion 5
string W = S.substr(5, 3);
S.insert(1, XYZ);
S.erase(10, 2); // borra 2 letras de la posicion 10
S.replace(2, 3, #####);
S.clear(); // borra el string

Operaciones en C++
size_t pos = S.find(und);
if (pos != string::npos) cout << Encontrado en la posicion << pos << endl;
pos = S.rfind('o');
pos = S.find_first_of(aeiou);
pos = S.find_last_of(aeiou);
pos = S.find_first_not_of(aeiou);

Complejidad
Operacio
n

C char
array

string

Concaten
a

N+M

N+M

Concaten
a self

N+M

Busqueda

Compara
cion

Size

Acceso
posicion

También podría gustarte