Pues si que estaba mal lo mío, ya que mi código dejaba que una posición fuera a la vez Acierto y Aproximación.
Ahora le he hecho un añadido para que no contemple esa doble condición:
Código C++:
Ver original#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
string evaluar (string cadena, string referencia);
int main()
{
cout<<evaluar("12345","54321")<<endl;
cout<<evaluar("yybr","ygbr")<<endl;
return 0;
}
string evaluar (string cadena, string referencia)
{
int acertados=0;
int aproximaciones=0;
//asumimos que las cadenas tienen el mismo tamaño
for (int i=0; i<cadena.size(); i++)
{
if (cadena[i]==referencia[i])
{
acertados++;
}
else
{
for (int j=0; j<cadena.size(); j++)
{
if (cadena[i]==referencia[j] && cadena[j]!=referencia[j])//aqui está el añadido
{
aproximaciones++;
break;
}
}
}
}
stringstream iss;
iss<<acertados<<"A, "<<aproximaciones<<"a";
return iss.str();
}
A ver si ahora cumple mejor
Sobre lo de comprobar las minúsculas...eres la
2ª persona que propone esa forma (y ambos personas muy solventes), pero pienso que este método es menos eficaz, ya que obliga a crear una copia, pasarla a minúsculas, y entiendo que la sobrecarga del operador == igualmente hace un recorrido por la cadena.
¿Puede ser o estoy diciendo una tontería?
@b3salvat: En caso de duda, haz caso a eferion