Funções de Auxílio – Linguagem C

Olá Pessoal…
Hoje irei mostrar 3 funções (substr, itoa e trim) que ajudam muito os programadores em Linguagem C. Essas funções não são nativas, então elas foram criadas para estudo / uso.


Pessoal, no tempo que eu estudava linguagem C, várias funções nativas em outras linguagens (como C++ e Java), não tinham em C, por isso fui procurando na internet, mas em poucos lugares obtive clareza. Então, acabei criando e modificando algumas funções, para uso na Linguagem C (usei o compilador GCC). Abaixo 3 funções que ajudam e muito na vida de um programador:

$> iToA:
A função iToA, era nativa do Borland C/C++, porém em bibliotecas na linguagem C pura, não há referências claras para essa função. Essa rotina basicamente, conver um número em String, com um fator de conversão (uma base). Abaixo o código fonte:

//função que converte número para String
char *xItoa(int nNum, char* cDest, int nRad) {
    static char dig[] =
        "0123456789"
        "abcdefghijklmnopqrstuvwxyz";
    int n = 0, neg = 0;
    unsigned int v;
    char* p, *q;
    char c;

    //se o número estiver negativo, altera a chave
    if (nRad == 10 && nNum < 0) {
        nNum = -nNum;
        neg = 1;
    }
    v = nNum;
    //adicionando os números na string
    do {
        cDest[n++] = dig[v%nRad];
        v /= nRad;
    } while (v);
    if (neg)
        cDest[n++] = '-';
    //encerrando a string
    cDest[n] = '';

    for (p = cDest, q = p + (n-1); p < q; ++p, --q)
        c = *p, *p = *q, *q = c;
    return cDest;
}

$> SubStr:
A Função SubStr, basicamente copia apenas uma parte de uma String, sendo assim, eu passo o parâmetro inicial e a quantidade de caracteres que pretendo copiar. Abaixo segue o código fonte da função:

//função que pega uma substring pegando a posição Inicial e a Quantidade
char *xSubstr(char *cTxt, int nIni, int nQuant)
{
  char *retorno = strdup(cTxt);
  int aux=0;
  int tam=strlen(cTxt);

  //se a posição Inicial for maior que a string
  //em si, o nIni será 0
  if(nIni < 0 || nIni > tam )
    nIni = 0;

  //se a Quantidade for maior que o Ini + string,
  //a Quantidade vai ser a diferença do tamanho
  //da string e do nIni
  if(nQuant > (tam-nIni))
    nQuant = tam-nIni;

  //percorre a string guardando os caracteres desejados
  for (aux=nIni;aux<nQuant+nIni;aux++)
    retorno[aux-nIni] = cTxt[aux];

  retorno[aux-nIni] = '';
  return retorno;
}

$> Trim:
A função Trim retira os espaços em branco nos dois extremos da String. Abaixo o código fonte:

//função que retira os espaços em branco das laterais
char *xTrim(char *cStr){
  char *nova;
  int i=0, nIni, nQuant;
  //teste - enquanto vai achando espaço em branco para pegar a posição Inicial
  while(i<=strlen(cStr)){
    if (cStr[i]!=' '){
      nIni=i;
      i=strlen(cStr);
    }
    i++;
  }

  //retirando os caracteres finais
  i-=2;
  while(i>0){
    //Se for espaço em branco, diminui o valor
    if (cStr[i]==' '){
      i--;
    }
    else
      break;
  }
  //Pegando a quantidade final
  nQuant=i-nIni+1;

  //pegando a string sem os espaços em branco
  nova=xSubstr(cStr,nIni,nQuant);
  return nova;
}

Agora basta estudar os códigos e aproveitá-los em seus programas. Abaixo um exemplo de programa que utiliza tais funções:

$> Programa:

#include <stdio.h>
#include <string.h>

char *xTrim(char *cStr);
char *xItoa(int nNum, char* cDest, int nRad);
char *xSubstr(char* cTxt, int nIni, int nQuant);

void main(){
  char *teste="Terminal de Informação";
  char *resp;
  xItoa(57, resp, 10);

  printf("\nFunções Complementares:");
  printf("\n> SubStr: ..%s..",xSubstr(teste, 0, 8));
  printf("\n> iToA:   ..%s..",resp);
  printf("\n> Trim:   ..%s..\n\n",xTrim("   Teste Trim   "));
}

//...Colocar as funções abaixo desse código



E aqui uma imagem de execução do programa:

Execução da Função

Execução da Função

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. Vaine disse:

    Mais Uma Vez, Parabéns pelo site. Esta 10!!!

  2. Kelton disse:

    Parabéns !! Material Muito bom!!!

Deixe uma resposta

Terminal de Informação