Fundamentos de la programación 5A GradoenIngenieríaInformática GradoenIngenieríadelSoftware GradoenIngenieríadeComputadores LuisHernándezYáñez/PabloMorenoGer FacultaddeInformática UniversidadComplutense Luis Hernández Yáñez/Pablo Moreno Ger Cadenas al estilo de C E/S con cadenas al estilo de C La biblioteca cstring Ejemplo Fundamentos de la programación: Cadenas al estilo de C (Anexo) 582 583 584 585 Arraysdecaracteresterminadosennulo const Max = 15; typedef char tCadena[Max]; tCadena cadena = "Adiós"; // Inicialización al declarar Siemprehayalfinaluncarácternulo(códigoASCII0 – '\0') Indicaqueenesaposiciónterminalacadena(exclusive) Luis Hernández Yáñez/Pablo Moreno Ger cadena A d i ó s \0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 EnelarraycabenMAX‐1caracteressignificativos Longitudmáximadelavariablecadena:14 No sepuedenasignarcadenasliterales:cadena = "Hola"; Ni copiarcadenasdirectamente:cad2 = cad1; Ni compararconop.relacionales:if (cad1 < cad2) ... Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 582 tCadena cadena; cin >> cadena; // Se añade un nulo al final Extractor:lalecturaterminaenelprimerespacioenblanco ¡Nosecompruebasiseleenmáscaracteresdelosquecaben! setw():máximodecaracteresacolocar(incluyendoelnulo) Luis Hernández Yáñez/Pablo Moreno Ger cin >> setw(15) >> cadena; cin.getline(cadena_estilo_C, máx): Paraleertambiénlosespaciosenblancoynomásdemáx‐1 cin.getline(cadena, 15); // Hasta 14 caracteres cout << cadena << endl; // El nulo no se muestra cin.getline(cad, máx) CadenasalestilodeC getline(cin, cad) Cadenasdetipostring Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 583 strlen(cadena):longitudactualdelacadena cout << "Longitud: " << strlen(cadena); strcpy(destino, origen):copiaorigen endestino strcpy(cad2, cad1); strcpy(cad, "Me gusta C++"); Luis Hernández Yáñez/Pablo Moreno Ger strcat(destino, origen):añadeorigen alfinaldedestino tCadena cad1 = "Hola", cad2 = "Adiós"; strcat(cad1, cad2); // cad1 contiene "HolaAdiós" strcmp(cad1, cad2):comparalexicográficamentelascadenas 0 sisoniguales,1 sicad1 >cad2 ó‐1 sicad1 <cad2 tCadena cad1 = "Hola", cad2 = "Adiós"; strcmp(cad1, cad2) // Devuelve 1 ("Hola" > "Adiós") ... http://www.cplusplus.com/reference/clibrary/cstring/ Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 584 cadenas.cpp Luis Hernández Yáñez/Pablo Moreno Ger #include <iostream> using namespace std; #include <cstring> int main() { const int MAX = 20; typedef char tCad[MAX]; tCad cadena = "Me gusta C++"; cout << cadena << endl; cout << "Cadena: "; cin >> cadena; // Lee hasta el primer espacio en blanco cout << cadena << endl; cin.sync(); // Sincronizar la entrada cout << "Cadena: "; cin.getline(cadena, MAX); cout << cadena << endl; cout << "Longitud: " << strlen(cadena) << endl; strcpy(cadena, "Hola"); ... Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 585 Luis Hernández Yáñez/Pablo Moreno Ger tCad cadena2 = " amigo"; strcat(cadena, cadena2); cout << cadena << endl; if (strcmp(cadena, cadena2) == 0) { cout << "Iguales"; } else if (strcmp(cadena, cadena2) > 0) { cout << cadena << " es mayor que " << cadena2; } else { cout << cadena << " es menor que " << cadena2; } cout << endl; return 0; } Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 586 LicenciaCC(Creative Commons) Estetipodelicenciasofrecenalgunosderechosaterceraspersonas bajociertascondiciones. Estedocumentotieneestablecidaslassiguientes: Luis Hernández Yáñez/Pablo Moreno Ger Reconocimiento(Attribution): Encualquierexplotacióndelaobraautorizadaporlalicencia haráfaltareconocerlaautoría. Nocomercial(Noncommercial): Laexplotacióndelaobraquedalimitadaausosnocomerciales. Compartirigual(Sharealike): Laexplotaciónautorizadaincluyelacreacióndeobrasderivadas siemprequemantenganlamismalicenciaalserdivulgadas. Pulsaenlaimagendearribaaladerechaparasabermás. Fundamentos de la programación: Cadenas al estilo de C (Anexo) Página 587