Tema 2: La clase string

Documentos relacionados
Tema 2: La clase string. Índice. Notas. Programación 2. Curso Notas. Definición Declaración Entrada / salida Métodos Operaciones

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial

Funciones mas importantes para el manejo de Caracteres

Arrays y Cadenas en C

Ejemplos de conversión de reales a enteros

Tema 2. El lenguaje de programación Java. Arrays y cadenas

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

TécniquesInformàtiques PRÀCTICA 6 (2 Sessions) Curs

Vectores. 27/05/05 Programación Digital I 1

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Introducción al tipo de dato ARRAY

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

7. Manejo de Archivos en C.

Modulo 1 El lenguaje Java

Esquema de un programa en C: bloques básicos

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

1 ELEMENTOS BASICOS DEL LENGUAJE

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Tema 9. Vectores y Matrices

PROGRAMACIÓN ORIENTADA A OBJETOS

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

Contenidos. Archivos en C++ Archivos en C++ Introducción

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

PRACTICA 6. VECTORES Y MATRICES.

SOLUCION EXAMEN junio 2006

Examen Principios de Programación Febrero 2012

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Curso PHP Módulo 1 R-Luis

promedio = nint((notas(1) + notas(2) + notas(3) + & notas(4) + notas(5) + notas(6)) / 6.0) print *, 'Su promedio es', promedio

SERIE DE EJERCICIOS 3

Prof. Dr. Paul Bustamante

Se guardan en archivos con extencion c y los cabezales con extension h

Fundamentos de Programción (I)

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Buses y Periféricos 2006/2007 Práctica 3. Ensamblador

1 Estructura básica de un programa C++

FACULTAD DE INGENIERÍA

Hoja de problemas Estructuras de Control

Examen escrito de Programación 1

Prof. Dr. Paul Bustamante

Tema 2. El lenguaje de programación Java (Parte 1)

Programación estructurada

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Problema - Votación. Entrada. Salida. Primera Olimpiada de Informática 1

Programación. Ejercicios Tema 4 Estructuras de Control Repetitivas

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Introducción a la Programación en MATLAB

Práctica 2 Gráficos Vectoriales con SVG (versión )

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

8. Sentencia return y métodos

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Programación básica C++

Tipos primitivos y clases de interés

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

FUNDAMENTOS DE INFORMÁTICA

Examen Septiembre Curso Programación en C++ Pág. 1

ALGORITMICA Y PROGRAMACION POR OBJETOS I

#include <fstream.h> ifstream descriptor ( nombre.extensión ); ofstream descriptor ( nombre.extensión );

Clases y Objetos. Informática II Ingeniería Electrónica

Elementos léxicos del lenguaje de programación Java

Cadenas de caracteres. 1. Definición 2. Funciones para manejo de cadenas

PRÁCTICA 1: INTRODUCCIÓN A LA ALGORÍTMICA BOLETIN DE PROBLEMAS RESUELTOS. (Curso 03-04)

Tipo de Dato TRANSACT SQL

Estructuras de repetición hacer-mientras y repita hasta

Curso Introducción JAVA Pág.: 1

Formato para prácticas de laboratorio

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Tema: Sobrecarga de Operadores.

Capítulo 1: Sistemas de representación numérica Introducción. Dpto. de ATC, Universidad de Sevilla - Página 1 de 8

Introducción al lenguaje Java

El lenguaje de Programación C. Fernando J. Pereda

Curso 0 de Informática

Prof. Dr. Paul Bustamante

Preliminares. Tipos de variables y Expresiones

Ficheros. fd = open(nombre, modo)

Programación en C++/Funciones

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Uso de archivos en C++

Semántica Denotacional

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Herramientas computacionales para la matemática MATLAB: Otros tipos de datos

Práctica 1 El juego de los chinos

Programación Orientada a Objetos

Tema 2 : Códigos Binarios

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández)

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Práctica 2: Simón dice

Carmen. Estándares de codificación. Manuel Arias Calleja

Tema: Arreglos de Objetos en C++.

Transcripción:

: string Programación 2 Curso 2013-2014

Índice 1 Cadenas de caracteres en C 2 Entrada / salida 3 entre vectores de caracteres y string 4 5

Cadenas de caracteres en C En C, las cadenas de caracteres tienen tamaño fijo char cad[10]; También es posible declararlas con tamaño dinámico de diferentes formas: int tamcad; cin >> tamcad; char cad[tamcad]; //, no recomendado por estandar char *cad = (char *)malloc(tamcad*sizeof(char)); // C char *cad = new char[tamcad]; // Sin embargo, una vez declaradas no pueden cambiar de tamaño.

con cadenas de C desde cout : como el resto de variables simples (int, float,... ) OJO: la cadena debe terminar en \0 cin : casi como el resto de variables cin ignora los blancos antes de la cadena... Termina de leer en cuanto encuentra el primer blanco (espacio, tabulador o \n) después de la cadena. Problema: y si la cadena tiene blancos? No limita el número de caracteres que se leen. PROBLEMA GORDO: y si lo que se lee no cabe en el vector?

getline Con getline se pueden leer cadenas con blancos y controlar su tamaño cin.getline(cadena,tam) Lee como mucho TAM-1 caracteres o hasta que llegue al final de la línea El \n del final de la línea se lee pero no se mete en la 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.

Problemas mezclando» con getline int num; cout << "Num= "; cin >> num; char cadena[1000]; cout << "Escribe una cadena: " ; cin.getline(cadena,1000); cout << "Lo que he leido es: " << cadena << endl; Num= 10 Escribe una cadena: Lo que he leido es: Por qué? Con >> se lee el 10, pero se deja de leer cuando se encuentra el primer carácter no numérico: \n getline encuentra en el buffer un \n, con lo que lee una cadena vacía. Solución: cin >> num; cin.get(); // Para leer el \n

Funciones de string.h (1/2) strlen devuelve la longitud de una cadena. char cad[] = "adios"; cout << strlen(cad) << endl; // Imprime 5 strcmp compara dos cadenas en orden lexicográfico, devolviendo un valor negativo si a < b, cero si a == b, o positivo si a > b. char cad[] = "adios"; char otra[] = "adeu"; cout << strcmp(cad,otra) << strcmp(otra,cad) << strcmp(cad,cad) << endl; // Imprime -1-1 0 strcpy copia una cadena en otra (ojo, violación de segmento si no cabe) char cad[10]; strcpy(cad,"hola"); // cabe, son 4 + \0 = 5 caracteres

Funciones de string.h (2/2) Las funciones strncmp, strncpy comparan o copian sólo los n primeros caracteres. Ejemplo: Ejemplo: char cad[tcad]; strncpy(cad,"hola, mundo",4); // solo copia "hola" cad[4] = \0 ; // Al contrario que strcpy, no copia el \ Para pasar una cadena de caracteres a entero o float, se puede usar atoi o atof. #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

Strings en : En se puede usar la clase string (aunque también se pueden usar los vectores de caracteres) En el paso de parámetros (valor / referencia), se parece a cualquier tipo simple (int, float,... ), Es de tamaño variable (no hay máximo), y puede crecer No termina en \0

Constante: const string cadena="hola"; Variable: string cadena; con inicialización: string cadena = "hola";

con strings cout : como los tipos simples (int, float,... ) cin : casi como con vectores de caracteres Ignora los blancos antes de la cadena y termina de leer en cuanto encuentra el primer blanco después de la cadena. Si la cadena tiene blancos : getline(cin,cadena) (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

de string (1/2) Al ser una clase, los métodos se invocan con un punto tras el nombre de la variable. Ejemplo: unsigned int tam=s.length(); // s es un string Longitud del string: unsigned int length(); Búsqueda de subcadena: unsigned int find (const string str, unsigned int pos=0); // Si no se encuentra devuelve la constante string::npos Reemplazo de subcadena: string& replace (unsigned int pos, unsigned int tam, const string str); Quitar una subcadena string& erase (unsigned int pos=0, unsigned int tam=npos);

de string (2/2) string a="hay una taza en esta cocina con tazas"; string b="taza"; // Longitud de a unsigned int tam = a.length(); // Buscamos la primera palabra taza unsigned int encontrado=a.find(b); if (encontrado!=string::npos) cout << "primera taza en: " << encontrado << endl; else cout << "palabra taza no encontrada"; // Buscamos la segunda palabra taza encontrado=a.find("taza",encontrado+b.length()); if (encontrado!=string::npos) cout << "segunda taza en: " << encontrado << endl; else cout << "palabra taza no encontrada"; // Sustituimos la primera taza por botella a.replace(a.find(b),b.length(),"botella"); cout << a << endl;

de string Comparaciones: ==,!=, >, <, >= y <= Asignación de una cadena a otra: con el operador =, como con cualquier tipo simple. Concatenación de cadenas: con el operador + s1 = "hola" ; s2 = "mundo"; s = s1 + ", " + s2; cout << s << endl ; // sale hola, mundo Acceso a componentes como si fuera un vector de caracteres: solamente si el string tiene algo. s = "hola" ; car = s[3]; s[0] = H ; cout << s << ":" << car << endl ; // sale Hola:a // Ejemplo de recorrido for (unsigned int i=0; i<s.length(); i++) s[i]= f ;

Conversión entre vectores de caracteres y string vector de caracteres a string : con la asignación (=) char cad[] = "hola"; string s ; s = cad ; s = s + ", mundo"; string a vector de caracteres : con c_str char cad[tcad]; string s = "mundo"; // OJO: debe haber sitio suficiente en cad strcpy(cad, s.c_str());

Conversión entre string y enteros Entero a string #include <sstream> int n=100; stringstream ss; ss << n; // Tambien se pueden concatenar mas cosas, por ejemplo: // ss << "El numero es: " << n << endl; string numero=ss.str(); string a entero string numero="100"; int n=atoi(numero.c_str());

entre vectores de caracteres y string vectores de caracteres string char cad[tam]; string s; char cad[]="hola"; string s="hola"; strlen(cad) s.length() cin.getline(cad,tam); getline(cin,s); if (!strcmp(c1,c2)){..} if (s1 == s2){..} strcpy(c1,c2); s1 = s2; strcat(c1,c2); s1 = s1 + s2; strcpy(cad,s.c_str()); s = cad; Terminan con \0 NO terminan con \0 Tamaño reservado fijo El tamaño reservado puede crecer Tamaño ocupado variable Tamaño ocupado = tamaño reservado Se usan en ficheros binarios NO se pueden usar en ficheros binarios

(1/4) Ejercicio 1 Diseña una función SubCadena que extraiga la subcadena de longitud n que empieza en la posición p de otra cadena. Tanto el argumento como el valor de retorno deben ser string. SubCadena("hoooola", 2, 5) "la" Ejercicio 2 Diseña una función llamada BorraCaracterDeCadena que dados un string y un carácter borre todas las apariciones del carácter en el string. "hola, mundo" o "hla, mund"

(2/4) Ejercicio 3 Diseña una función BuscarSubCadena que busque la primera aparición de una subcadena a dentro de una cadena b, y devuelva su posición o 1 si no está. Tanto a como b deben ser string. BuscarSubCadena("oool", "hoooola") 2 Ampliaciones: 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.

(3/4) Ejercicio 4 Diseña una función Codifica que codifique una cadena sumando una cantidad c al código ASCII de cada carácter, pero teniendo en cuenta que el resultado debe ser una letra. Por ejemplo, si n = 3, la a se codifica como d, la b como e,..., la x como a, la y como b y la z como c. La función debe admitir letras mayúsculas o minúsculas, los caracteres que no sean letras no se deben codificar y el argumento debe ser string. Codifica("hola, mundo", 3) "krod, pxqgr"

(4/4) Ejercicio 5 Diseña una función EsPalindromo que devuelva true si el string que se le pasa como parámetro es palíndromo. EsPalindromo("hola,aloh") true EsPalindromo("hola, aloh") false Ejercicio 6 Diseña una función llamada CreaPalindromo que añada a un string el mismo string invertido, de forma que el resultado sea un palíndromo. "hola, mundo" "hola, mundoodnum,aloh" Existen dos formas de hacerlo: string CreaPalindromo(string); void CreaPalindromo(string &);