Dificuldade usando o while [RESOLVIDO]

1. Dificuldade usando o while [RESOLVIDO]

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 04/12/2021 - 04:03h

Bom dia a Todos.

Montei o algoritmo abaixo onde não estou conseguindo consertar o meu while, se alguém puder ajudar agradeço!
Minha função usando while não está funcionando igual a minha função usando o for.
Pois não consigo executar ela dentro do comando puts como faço com a função for
#include <stdio.h>

char *strcat_for(char *Dest, char *Src) {
int x = 0;
for( ; Dest[x] != '\0'; x++);
for(int y = 0; Src[y] != '\0'; y++, x++)
Dest[x] = Src[y];

Dest[x] = '\0';
return Dest;
}

char *strcat_while(char *Dest, char *Src) {
while(*Dest)
Dest++;

while(*Src)
*Dest++ = *Src++;

*Dest = '\0';
return Dest;

/* Mesmo sem usar ponteiros não funciona igual ao for
int x = 0, y = 0;
while(Dest[x] != '\0')
Dest++;

while(Src[y] != '\0')
Dest[x++] = Src[y++];

Dest[x] = '\0';
return Dest;
*/
}

int main(void) {
char for1[15] = "for", while1[15] = "while", End[] = " 2022";

puts(strcat_for(for1, End)); // Funciona!
//puts(strcat_while(while1, End)); // Não funciona, não imprime, Porque?

// O While só funciona assim, Porque?
strcat_while(while1, End);
puts(while1);
}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2021 - 07:19h

As duas funções são bem diferentes por dentro. Quando comecei a ler sua descrição, imaginei que era o mesmo algoritmo, usando apenas comandos diferentes, mas uma não tem nada a ver com a outra.

Note que a função que você escreveu usando o while altera o valor do parâmetro e retorna o parâmetro depois de alterado. Se você quiser que ela tenha um comportamento semelhante ao de strcat(), tem de usar outra variável ara percorrer o array de destino, a fim de preservar o valor original em algum lugar, e poder retornar esse valor original ao final da função.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

3. Re: Dificuldade usando o while [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 04/12/2021 - 20:15h

Veja se isso ajuda;
#include <stdio.h>
#include <stdlib.h>

int contarLetras(char *entrada){
int letras;

for(letras = 0; entrada[letras] != '\0'; ++letras);

return letras;
}

char *strcat_for(char *Dest, char *Src) {
int letrasDest = contarLetras(Dest);
int letrasSrc = contarLetras(Src);
int total = letrasDest + letrasSrc + 1;
int indexResult = 0;

char *result = malloc(total * sizeof(char));

for(int i = 0; i < total; ++i) {
result[i] = '\0';
}

for(int i = 0; i < letrasDest; ++i, ++indexResult) {
result[indexResult] = Dest[i];
}

for(int i = 0; i < letrasSrc; ++i, ++indexResult) {
result[indexResult] = Src[i];
}

return result;
}

char *strcat_while(char *Dest, char *Src) {
int letrasDest = contarLetras(Dest);
int letrasSrc = contarLetras(Src);
int total = letrasDest + letrasSrc + 1;
int indexResult = 0;

char *result = malloc(total * sizeof(char));
int i = 0;

while(i < total) {
result[i] = '\0';
++i;
}

i = 0;

while(i < letrasDest) {
result[indexResult] = Dest[i];
++i;
++indexResult;
}

i = 0;

while(i < letrasSrc) {
result[indexResult] = Src[i];
++i;
++indexResult;
}

return result;
}

int main(void) {
char *resultFor = strcat_for("abc", "123");
char *resultWhile = strcat_while("123", "abc");

printf(" For: '%s' \n", resultFor);
printf("While: '%s' \n", resultWhile);
}



4. Re: Dificuldade usando o while [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/12/2021 - 19:59h

Prezado adrisiq,

Acho que você não entendeu o contexto. O autor do tópico está tentando reimplementar as funções da biblioteca padrão, não criar funções novas e mais “espertas”, com recursos como alocação dinâmica.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts