Advertisement
Graf_Spee

Untitled

Dec 14th, 2014
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Escreva uma funcão que concatene duas strings dadas A e B numa nova string C
  5. (ex: se A = “Perdias chaves ” e B = “do carro”, então C = “Perdi as chaves do carro”): */
  6.  
  7. void ConcatenaString(char stringA[], char stringB[], char stringC[], int tamanho_string1, int tamanho_string2) // Declaramos a função que receberá como parâmetro o endereço da stringA, da stringB, da stringC e o tamanho das duas primeiras strings
  8. {
  9. int contador; // declaramos um contador
  10. for(contador = 0; contador < tamanho_string1; contador++) // efetuamos um for de 0 até o tamanho da string1
  11. {
  12. stringC[contador] = stringA[contador]; // dentro do for copiamos todos os caracteres de stringA para stringC
  13. }
  14. // Agora já copiamos todos os caracteres de stringA para stringC, o que falta fazermos é adicionar os caracacteres da stringB para a stringC, porém, devemos observar que devemos adicioná-los depois dos caracteres que copiamos da stringA
  15. for(contador; contador <= tamanho_string1 + tamanho_string2; contador++) // Desta forma, fazemos um for continuando de onde paramos no for anteiror (ou seja, do ultimo caractere que copiamos da stringA) e dizemos que ele é menor que o tamanho de ambas as strings somadas
  16. {
  17. stringC[contador] = stringB[contador - tamanho_string1]; // Dentro dele dizemos que a stringC na posição que estamos é igual a stringB na posição que estamos menos o tamanho da string1
  18. }
  19. }
  20.  
  21. /*
  22.  
  23. *Por que precisamos dizer que o segundo for é menor que ou igual ao tamanho de ambas as strings somadas?
  24.  
  25. Porque se vamos concatenar por exemplo as strings "Ola meu nome é" e "Fulano" a string de saída (ou seja, a string com as duas juntas terá um tamanho total igual a soma do tamanho de ambas as strings
  26.  
  27. *Por que o segundo for é menor que ou igual e o primeiro é só menor que?
  28.  
  29. Nos materias sobre string aprendemos que no final de cada string existe um caractere especial que é: '\0'. Ele indica o fim de uma string, assim quando o computador vai escrever uma string na tela ele vai printando caractere por caractere até encontrar o '\0'
  30. Assim, não podemos copiar o '\0' da primeira string, caso contrário o computador printaria somente "Ola meu nome e", pois encontraria o '\0' após o 'e'. Já na segunda string é necessário copiar o '\0' para indicar para o computador que aquele é o final da string
  31.  
  32. *Por que copiamos para stringC[contador] o valor de stringB[contador - tamanho_string1]?
  33.  
  34. Pois ao receber os valores da stringB na função, os recebemos de 0 até o tamanho_string2 - 1, porém, quando vamos copiá-los não podemos copiar a partir do 0 para a stringC, uma vez que a stringA deve ser colocada antes da stringB.
  35. Por isso, nosso contador vai estar posicionado depois da stringC, no exemplo o contador começaria na posição 9, e o tamanho da string1 é 9, logo, estaremos copiando o caractere 0 da string2..
  36. Em seguida, nosso contador será 10, e o tamanho da string1 é 9, logo, estaremos copiando o caractere 1 da string2..
  37.  
  38. */
  39.  
  40.  
  41. int main()
  42. {
  43. char string1[] = "Ola, meu nome e";
  44. char string2[] = " Fulano";
  45. char string3[256];
  46. int tamanho_s1 = 15;
  47. int tamanho_s2 = 7;
  48. ConcatenaString(string1, string2, string3, tamanho_s1, tamanho_s2);
  49. printf("String 1: %s\nString 2: %s\nString 3: %s\n", string1, string2, string3);
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement