Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) PadLeft em C


Marcia Rosa

Pergunta

Senhores,

Venho recorrer a ajuda de vocês novamente pois estou a dois dias quebrando a cabeça e ainda não consegui resolver meu problema.

No C# quando eu preciso alocar valores a esquerda eu uso PadLeft. Exemplo:


string var1 = "55";
var1 = var1.PadLeft(5, '0');
//valor de var1 será "00055"
[/codebox]

Alguém sabe me dizer se o C possui algo assim? Ou já viu algo que dê pra fazer isso?

Meu código que estou tetando fazer:

[codebox]
void PadLeft(char *charPrencher, char *charDestino, char *charOrigem, int total)
{
int i;
int j;
//preencher antes do valor enviado
for(i=0;i < (total - (int)strlen(charOrigem)); i++)
{
*charDestino = charPrencher;
charDestino++;
}

//depois juntar com os dados enviados
for(j=0; j < strlen(charOrigem); j++)
{
charDestino++;
*charDestino = *charOrigem;
charOrigem++;

}
}
//onde:
//charPrencher = char que será acrescido antes (zero no exemplo)
//charDestino = o novo valor 00055 depois de processado
//charOrigem = 55
//total = tamanho total de caracteres que irá ter para montar a quantidade de caracteres a esquerda (no exemplo 5)

Qualquer dica é bem vinda.

Obrigada.

Editado por Marcia Rosa
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total)
{
    int strSize=strlen(charOrigem)+total+1;
    charDestino=(char*)malloc(strSize);
    memset(charDestino, 0, strSize);
    int i;
    for(i=0; i<total; i++){
        charDestino[i]=charPrencher;
    }
    strcat(charDestino, charOrigem);
}

Essa função aloca a memoria necessária para a string de destino (charDestino), não se esqueça de desalocar a memoria depois que usar a string, usando free();

Link para o comentário
Compartilhar em outros sites

  • 0

qual erro deu?

que compilador você esta usando?

eu dei uma testada rapida aqui no visual studio e funcionou...

você deve ter errado ao chamar a função....

tenta compilar o código abaixo:

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

void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total)
{
 int strSize=strlen(charOrigem)+total+1;
 charDestino=(char*)malloc(strSize);
 memset(charDestino, 0, strSize);
 int i;
 for(i=0; i<total; i++){
 charDestino[i]=charPrencher;
 }
 strcat(charDestino, charOrigem);
}

int main()
{
    char *destino;
    PadLeft('0', destino, "test", 10);
    printf("%s", destino);
    free(destino);
    
    getch();
}

Link para o comentário
Compartilhar em outros sites

  • 0
qual erro deu?

que compilador você esta usando?

eu dei uma testada rapida aqui no visual studio e funcionou...

você deve ter errado ao chamar a função....

tenta compilar o código abaixo:

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

void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total)
{
 int strSize=strlen(charOrigem)+total+1;
 charDestino=(char*)malloc(strSize);
 memset(charDestino, 0, strSize);
 int i;
 for(i=0; i<total; i++){
 charDestino[i]=charPrencher;
 }
 strcat(charDestino, charOrigem);
}

int main()
{
    char *destino;
    PadLeft('0', destino, "test", 10);
    printf("%s", destino);
    free(destino);
    
    getch();
}

Olá David,

Aqui eu já havia testado da vez passada e gera o seguinte erro: "Src\Funcoes.c:92: error: parse error before '&' token". Se tiro o & do parametro charDestino, compila. Só que daí não faz nada.

Eu uso compilador de um sistema embarcado (não posso informar qual). Tenho que ficar limitada ao que esse compilador interpreta, que no caso não é tudo que normalmente se pode usar no C.

De qualquer forma valeu pela força e vou continuar tentando.

Abç.

Marcia

Link para o comentário
Compartilhar em outros sites

  • 0

alguns compiladores não suportam usar uma referencia para ponteiro diretamente (no caso o &*).

Se você não sabe o que é passar um ponteiro por referencia leia o artigo a seguir: (EM INGLES)

http://www.codeguru.com/cpp/cpp/cpp_mfc/po...ticle.php/c4089

fiz uma pequena modificação na função para funcionar com o seu compilador.

void PadLeft(char charPrencher, char **charDestino, const char *charOrigem, int total)
{
 int strSize=strlen(charOrigem)+total+1;
 *charDestino=(char*)malloc(strSize);
 char *tmp=*charDestino;
 memset(*charDestino, 0, strSize);
 int i;
 for(i=0; i<total; i++){
    tmp[i]=charPrencher;
 }
 strcat(tmp, charOrigem);
 *charDestino=tmp;
}
agora a referencia para o ponteiro deverá ser passada ao chamar a função. (o segundo parametro deverá ser precedido de '&' "). exemplo:
char *dest;
const char *origem="Test";
PadLeft('0', &dest, origem, 5); //Repare que "dest" é passado por referencia
MessageBox(0, dest, 0, 0);
free(dest); //Não se esqueça de desalocar a memoria

*Se não funcionar agora sugiro trocar de compilador ¬¬

;)

Link para o comentário
Compartilhar em outros sites

  • 0
alguns compiladores não suportam usar uma referencia para ponteiro diretamente (no caso o &*).

Se você não sabe o que é passar um ponteiro por referencia leia o artigo a seguir: (EM INGLES)

http://www.codeguru.com/cpp/cpp/cpp_mfc/po...ticle.php/c4089

fiz uma pequena modificação na função para funcionar com o seu compilador.

void PadLeft(char charPrencher, char **charDestino, const char *charOrigem, int total)
{
 int strSize=strlen(charOrigem)+total+1;
 *charDestino=(char*)malloc(strSize);
 char *tmp=*charDestino;
 memset(*charDestino, 0, strSize);
 int i;
 for(i=0; i<total; i++){
    tmp[i]=charPrencher;
 }
 strcat(tmp, charOrigem);
 *charDestino=tmp;
}
agora a referencia para o ponteiro deverá ser passada ao chamar a função. (o segundo parametro deverá ser precedido de '&' "). exemplo:
char *dest;
const char *origem="Test";
PadLeft('0', &dest, origem, 5); //Repare que "dest" é passado por referencia
MessageBox(0, dest, 0, 0);
free(dest); //Não se esqueça de desalocar a memoria

*Se não funcionar agora sugiro trocar de compilador ¬¬

;)

David,

Agora sim funcionou. Aos poucos estou me acostumando com o C. Achava que seria fácil pra mim que mexia com C# mas estou vendo que muita coisa é BEM diferente.

Muito obrigada pela ajuda.

Marcia.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...