Tratamiento de «strings» en c++

Los strings son cadenas de caracteres y podemos tratarlas como tales (vectores de tipo char) a la hora de recorrerlas o modificarlas.

Con el fin de ver su funcionamiento y aprender a manejar las veremos un par de ejemplos.

Recordad en la cabezera del programa introducir la libreria de string.

(en principio no es necesaria ya que iostream tiene funciones de strings pero incluyéndola os aseguráis de que funcionen)

#include <string>

Ejemplos

1. Empezaremos con  un programa simple en el cual una función nos devolverá si la palabra introducida es un palíndromo. (Un palíndromo es aquella palabra que puede leerse tanto al derecho como al revés, como por ejemplo: OSO, RADAR,SOMOS…)

#include <iostream>
#include <string>
using namespace std;
bool palindromo(const string& s){

int i=s.length()-1,a=0;
while(i>a){

if(s[i]!=s[a]){

return false;

}else{

i–;
a++;

}

}

return true;

}
int main(){

string s;
cin >> s;
if(palindromo(s)){

cout << «SI» << endl;

}else{

cout << «NO» << endl;

}

}

Como podéis ver en el main solo crearemos la variable ‘s’  que será el string que introduciremos y en un if llamaremos a la función ‘palindromo’ que nos devolverá true o false dependiendo de si la palabra es un palíndromo o no.

En la función ‘palindromo‘ recorreremos el string por ambos lados a la vez, comparándolos entre ellos para ver si son iguales. El bucle se parará cuando ambos recorridos lleguen al centro de la palabra o en el momento que detecte que no son iguales.

 

2.En este programa haremos que dada una secuencia de palabras, escriba cuantas de ellas han sido introducidas entre las palabras “principio” y “final”. Si falta cualquiera de las dos o las dos mostraremos un mensaje de error.

#include <iostream>

#include <string>

using namespace std;

int main(){

string s;
bool principio = false;
bool final = false;
bool cerrar=false;
int num = 0;

while (cin >> s and !cerrar){

if(principio){

if(s!=»final»){

++num;

}else{

final = true;
cerrar=true;

}

}else if(s== «principio»){

principio=true;

}
else if(s==»final») {

cerrar=true;

}

}
if(final and principio){

cout << num << endl;

}
else{

cout << «Error» << endl;

}

}

Para este ejercicio he decidido crear 3 variables booleanas para hacerlo óptimo. Una que indique cuando cerrar el bucle y una de inicio y fin de la secuencia que ha de leer.

Es importante en este tipo de programas poner el orden correcto de las comprobaciones que hacemos con los if.

Como podéis ver, primero compruebo si ya ha sido iniciada la cadena, sino, compruebo si la he de iniciar o si ha introducido directamente el final (cosa errónea). Una vez iniciada (principio=true) comprobaremos si no es el final, si esto es cierto, incrementaremos las palabras introducidas, si esto es falso significará que si que es el final, en este caso indicamos que es el final con la varible booleana final y ponemos cerrar = true para que acabe con el bucle.

Deja un comentario