//Código fuente de las páginas 352-353

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void main() {
  string a("Hola "), b("a "), c("los lectores."), d;
  // a, b, c y d son cadenas
  d = a + b + c;
  cout << d << endl;
  if (b<c)
    cout << "La cadena b es menor que la cadena c" << endl;

  // s1, s2, x y re son cadenas
  string s1, s2, x, re;
  int pos, n;
 
  cout << "Introduce una frase palabra a palabra,"
		  " 0 para finalizar\n";
  do {
    cin >> x;
    if (x!="0") { 
      // si la cadena no está vacía le añade un espacio al final
      if (!s1.empty()) s1.append(" ");
      // añade la cadena x al final de la cadena s1
      s1.append(x);  // también s1 += x sería válido
    }
  } while (x!="0");
  cout << "La frase introducida es: \n"<<s1;
  cout << "\nSelecciona la palabra a buscar en la frase ";
  cin >> s2;
  pos=0; n=0;
  cout << "La palabra aparece en la frase en la/s posición/es: ";
  do {
    // comprueba si s2 está en s1. pos será el índice de la 
    // primera posición de s1 en la que aparece la cadena s2
    // devuelve -1 cuando no encuentra el elemento
    pos= s1.find(s2,pos);
    if (pos!=-1) {
      if (n!=0) cout<<", ";
      cout << pos;
      pos++; n++;
    }
  }
  while (pos!=-1);
  cout << "\nIntroduce la palabra a buscar ";
  cin >> s2;
  cout << "Introduce la palabra a reemplazar ";
  cin >> re;
  pos= 0;
  do {
    pos=s1.find(s2,pos);
    if (pos!=-1) {
      // reemplaza los caracteres de la palabra a buscar, s2,
      // por re.
      s1.replace(pos,s2.length(),re);
      pos++;
    }
  } while (pos!=-1);
  cout << "La cadena resultante es: \n" << s1;
}
