sexta-feira, 5 de julho de 2013

Função "explode" com wxWidgets

Criar uma função “explode” em wxWidgets é uma tarefa simples, graças a facilidade proporcionada pelo wxArrayString, ela pode ser implementada da seguinte maneira:




wxArrayString explode(char delimiter, wxString mStr)
{
 wxArrayString ret;
 wxString getStr;

  for( unsigned int i = 0 ; i < mStr.Length() ; i++ )
 {
  if( mStr.GetChar(i) == delimiter)
  {
   ret.Add( getStr );
   getStr.Clear();
  }
  else
  {
   getStr.Append(mStr.GetChar(i));
   if( i == ( mStr.Length() - 1 ) ) ret.Add( getStr );
  }
 }

  return ret;
}



Para usarmos a mesma:

//Crio uma string contendo as substrings separadas por ';'
wxString mVal = wxT( "String 1;String 2;String 3;String 4" );


//Agora crio o wxArrayString para pegar cada uma delas
wxArrayString mgetVals = explode( ';' , mVal );

//Pego cada um dos valores
wxString valor1 = mgetVals.Item( 0 );
wxString valor2 = mgetVals.Item( 1 );
wxString valor3 = mgetVals.Item( 2 );
wxString valor4 = mgetVals.Item( 3 );


Essa função é muito útil para passarmos listas para um wxComboBox por exemplo.

Qualquer dúvida ou correção no código deixe nos comentários.

Até a próxima.

segunda-feira, 1 de julho de 2013

Verificar se um ano é bissexto

Hoje vou mostrar como podemos verificar se um ano é bissexto usando uma função bem simples:

bool IsBissextile( int year )
{
return ( year % 4 == 0) && ( ( year % 400 ) == 0 || ( year % 100 ) > 0 );
}

O que fizemos aqui foi verificar se o ano é divisível por 4, ou seja, verificamos se o módulo da divisão é igual a zero, depois verificamos uma segunda condição, o ano não deve ser divisível por 100 ao menos que ele seja divisível por 400, se as duas condições forem verdadeiras é porque o ano é bissexto.

Vamos testar a função verificando se o ano atual é bissexto, para isso vamos usar a classe wxDateTime.

int year = wxDateTime::Today().GetYear();

if( IsBissextile( year ) )
wxMessageBox( wxT( "É bissexto" ) );
else
wxMessageBox( wxT( "Não é bissexto" ) );

Até a próxima dica