C++ Contar los dígitos de un número

Código para contar los dígitos de un número entero: Fuente

#include <cmath>
#include <limits>

// log10(x) == (n - 1) digits
// (1 + n + fff) == number of digits
// fff == floating-point fudge factor
int digits(int number)
{
// Avoid doing work if number is 0
if (number != 0)
{
double lg = std::log10(static_cast<double>(std::abs(number)));
double eps = std::numeric_limits<double>::epsilon();
return static_cast<int>(1 + lg + eps);
}
else
return 1;
}

// Count until 0 and chop of every tenth
int digits2(int num)
{
// Avoid doing work if number is 0
if (num != 0)
{
int n = 0;

while (num > 0)
{
++n;
num /= 10;
}

return n;
}
else
return 1;
}

C++ Autoincremento de nombre

Función para incrementar un nombre de algo añadiendole números. Útil cuando es necesario un nombre único.

void IncName( StringC& strName, int nCount, int nMaxChars )
{
int nCountDigit = 1;
while( (nCount / pow(10.0,nCountDigit)) >= 1.0 )
{
nCountDigit++;
}

StringC strFormat;
strFormat.Format( L"%%s_%d", nCount );

strName.Format( strFormat, (const wchar_t*)strName.Mid( 0, nMaxChars-nCountDigit-1 ) );
}
¡Se puede mejorar haciendo uso de las funciones de la siguiente entrada!

Esta función fue usada en SOA_SetOfAngles para ponerle nombre a la lista de puntos.
Una versión fue usada en DXF2LandXml para ponerle nombre a los puntos repetidos.

C# Generics y Find

Para buscar en una lista genérica en C# un elemento que cumpla una determinada condición existe la función:
public T Find Predicate match

Para realizar una búsqueda usando Find en una sola línea de código podemos usar los Métodos Anónimos incluidos en .NET 2.0. Los métodos anónimos permiten asociar código a los objetos delegados directamente.

Así, para buscar un valor dentro de una lista con Find podremos hacer por ejemplo:

int result = CgPointCollection.Find(
delegate( XmlCgPoint point ) { return point.Name == nameToFind; } );