Pular para o conteúdo

Dificuldade usando o while [RESOLVIDO]

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. Dificuldade usando o while [RESOLVIDO]

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);
}

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Dificuldade usando o while [RESOLVIDO]

Melhor resposta

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]

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]

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)

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder