Escolar Documentos
Profissional Documentos
Cultura Documentos
Tema 2
Cadenas en C
La clase
string en
C++
Definición
Tema 2: La clase string
Declaración
Entrada/salida
Programación 2
Métodos
Operaciones
Conversiones
Comparativa
Ejercicios
Curso 2013-2014
Notas
Índice
Tema 2
1 Cadenas de caracteres en C
Cadenas en C
La clase
2 La clase string en C++
string en
C++ Definición
Definición
Declaración
Declaración
Entrada/salida
Métodos
Entrada / salida
Operaciones
Métodos
Conversiones
Operaciones
Comparativa
Ejercicios
3 Conversiones entre vectores de caracteres y string
4 Comparativa
5 Ejercicios
Notas
Cadenas de caracteres en C
Tema 2
En C, las cadenas de caracteres tienen tamaño fijo
char cad[10];
Cadenas en C
La clase
string en
C++
También es posible declararlas con tamaño dinámico
Definición de diferentes formas:
Declaración
Entrada/salida
Métodos
int tamCad;
Operaciones cin >> tamCad;
Conversiones char cad[tamCad]; // C++, no recomendado por estandar
Comparativa
Notas
Entrada/salida con cadenas de C desde C++
Tema 2
Cadenas en C
La clase
cout : como el resto de variables simples (int,
string en
C++
float, . . . ) OJO: la cadena debe terminar en \0
Definición
Declaración
cin : casi como el resto de variables
Entrada/salida
Métodos
cin ignora los blancos antes de la cadena . . .
Operaciones
Termina de leer en cuanto encuentra el primer blanco
Conversiones (espacio, tabulador o \n) después de la cadena.
Comparativa Problema: ¿y si la cadena tiene blancos?
Ejercicios No limita el número de caracteres que se leen.
PROBLEMA GORDO: ¿y si lo que se lee no cabe en el
vector?
Notas
getline
Tema 2
Ejercicios
cadena. La función añade ’\0’ al final de lo que ha
leído (por eso sólo lee TAM-1 caracteres)
. . . pero si el usuario introduce más caracteres de los
que caben, estos se quedan en el buffer y la siguiente
lectura falla.
Notas
Problemas mezclando » con getline
Tema 2
int num; cout << "Num= ";
cin >> num; char cadena[1000];
cout << "Escribe una cadena: " ;
Cadenas en C
cin.getline(cadena,1000);
La clase cout << "Lo que he leido es: " << cadena << endl;
string en
C++
Definición
Declaración Num= 10
Entrada/salida
Escribe una cadena: Lo que he leido es:
Métodos
Operaciones
Tema 2
strlen devuelve la longitud de una cadena.
char cad[] = "adios";
Cadenas en C
cout << strlen(cad) << endl; // Imprime 5
La clase
string en
C++
Definición
strcmp compara dos cadenas en orden lexicográfico,
Declaración devolviendo un valor negativo si a < b, cero si a == b,
Entrada/salida
Métodos o positivo si a > b.
Operaciones
Notas
Funciones de string.h (2/2)
Tema 2
Las funciones strncmp, strncpy comparan o copian
sólo los n primeros caracteres. Ejemplo:
Cadenas en C Ejemplo:
La clase
string en
C++
char cad[tCAD];
Definición strncpy(cad,"hola, mundo",4); // solo copia "hola"
Declaración cad[4] = ’\0’; // Al contrario que strcpy, no copia el \0
Entrada/salida
Métodos
Operaciones
Conversiones
Para pasar una cadena de caracteres a entero o float,
Comparativa
se puede usar atoi o atof.
Ejercicios #include <cstdlib> // Importante!
char cad[]="100";
int n=atoi(cad); // n vale 100
char cad2[]="10.5";
float f=atof(cad2); // f vale 10.5
Notas
Strings en C++: Definición
Tema 2
Cadenas en C
La clase
string en En C++ se puede usar la clase string (aunque
C++
Definición
también se pueden usar los vectores de caracteres)
Declaración
Entrada/salida En el paso de parámetros (valor / referencia), se
Métodos
Operaciones parece a cualquier tipo simple (int, float, . . . ),
Conversiones
Es de tamaño variable (no hay máximo), y puede
Comparativa
crecer
Ejercicios
No termina en \0
Notas
Declaración
Tema 2
Cadenas en C
Constante:
La clase
string en
C++ const string cadena="hola";
Definición
Declaración
Entrada/salida
Métodos
Variable:
Operaciones
Conversiones
string cadena;
Comparativa
Tema 2
Conversiones getline(cin,cadena)
Comparativa
Ejercicios
(ojo, cambia la sintaxis con respecto a los vectores de
caracteres)
No limita el número de caracteres que se leen. Con
strings no hay problema!!
OJO: si se hace ’>>’ y después ’getline’ ocurre lo
mismo que con vectores de caracteres
Notas
Métodos de string (1/2)
Tema 2
Al ser una clase, los métodos se invocan con un punto tras
el nombre de la variable. Ejemplo:
Cadenas en C unsigned int tam=s.length(); // s es un string
La clase
string en
C++ Longitud del string:
Definición
Declaración unsigned int length();
Entrada/salida
Métodos
Operaciones Búsqueda de subcadena:
Conversiones
unsigned int find (const string str, unsigned int pos=0);
Comparativa // Si no se encuentra devuelve la constante string::npos
Ejercicios
Reemplazo de subcadena:
string& replace (unsigned int pos, unsigned int tam,
const string str);
// Longitud de a
Cadenas en C
unsigned int tam = a.length();
La clase
string en
C++ // Buscamos la primera palabra ’taza’
Definición unsigned int encontrado=a.find(b);
Declaración
if (encontrado!=string::npos)
Entrada/salida
Métodos cout << "primera ’taza’ en: " << encontrado << endl;
Operaciones else cout << "palabra ’taza’ no encontrada";
Conversiones
// Buscamos la segunda palabra ’taza’
Comparativa
encontrado=a.find("taza",encontrado+b.length());
Ejercicios if (encontrado!=string::npos)
cout << "segunda ’taza’ en: " << encontrado << endl;
else cout << "palabra ’taza’ no encontrada";
Notas
Operaciones de string
Tema 2
Comparaciones: ==, !=, >, <, >= y <=
Asignación de una cadena a otra: con el operador =,
Cadenas en C
como con cualquier tipo simple.
La clase
string en
Concatenación de cadenas: con el operador +
C++
Definición s1 = "hola" ; s2 = "mundo";
Declaración s = s1 + ", " + s2;
Entrada/salida
Métodos
cout << s << endl ; // sale ’hola, mundo’
Operaciones
// Ejemplo de recorrido
for (unsigned int i=0; i<s.length(); i++)
s[i]=’f’;
Notas
Conversión entre vectores de caracteres y
string
Tema 2
Notas
Conversión entre string y enteros
Tema 2
Entero a string
Cadenas en C
#include <sstream>
La clase
string en
C++
int n=100;
Definición stringstream ss;
Declaración
Entrada/salida
Métodos
ss << n;
Operaciones // Tambien se pueden concatenar mas cosas, por ejemplo:
Conversiones
// ss << "El numero es: " << n << endl;
Comparativa
string numero=ss.str();
Ejercicios
string a entero
string numero="100";
int n=atoi(numero.c_str());
Notas
Comparativa entre vectores de caracteres y
string
Tema 2
vectores de caracteres string
char cad[TAM]; string s;
Cadenas en C
char cad[]="hola"; string s="hola";
La clase
string en strlen(cad) s.length()
C++
Definición
cin.getline(cad,TAM); getline(cin,s);
Declaración if (!strcmp(c1,c2)){..} if (s1 == s2){..}
Entrada/salida
Métodos
strcpy(c1,c2); s1 = s2;
Operaciones strcat(c1,c2); s1 = s1 + s2;
Conversiones
Notas
Ejercicios (1/4)
Tema 2
Tema 2
Ejercicio 3
Cadenas en C
La clase
Diseña una función “BuscarSubCadena” que busque la
string en
C++
primera aparición de una subcadena a dentro de una
Definición
Declaración
cadena b, y devuelva su posición o −1 si no está. Tanto a
Entrada/salida
Métodos
como b deben ser string.
Operaciones
Conversiones
BuscarSubCadena("oool", "hoooola") ⇒ 2
Comparativa
Ampliaciones:
Ejercicios
1 Ampliar la función para que admita otro parámetro que sea el
número de aparición (si vale 1 sería como la función original)
2 Hacer otra función similar que devuelva el número de apariciones
de la subcadena en la cadena.
Notas
Ejercicios (3/4)
Tema 2
Ejercicio 4
Cadenas en C
Diseña una función “Codifica” que codifique una cadena
La clase
string en sumando una cantidad c al código ASCII de cada carácter,
C++
Definición pero teniendo en cuenta que el resultado debe ser una letra.
Declaración
Entrada/salida
Métodos
Por ejemplo, si n = 3, la ’a’ se codifica como ’d’, la ’b’
Operaciones
como ’e’, . . . , la ’x’ como ’a’, la ’y’ como ’b’ y la
Conversiones
’z’ como ’c’.
Comparativa
Tema 2
Ejercicio 5
Cadenas en C
Diseña una función “EsPalindromo” que devuelva true si
La clase el string que se le pasa como parámetro es palíndromo.
string en
C++ EsPalindromo("hola,aloh") ⇒ true
Definición
Declaración
EsPalindromo("hola, aloh") ⇒ false
Entrada/salida
Métodos
Operaciones
Ejercicio 6
Conversiones Diseña una función llamada “CreaPalindromo” que
Comparativa añada a un string el mismo string invertido, de forma
Ejercicios que el resultado sea un palíndromo.
"hola, mundo" ⇒ "hola, mundoodnum ,aloh"
Existen dos formas de hacerlo:
string CreaPalindromo(string);
void CreaPalindromo(string &);
Notas