Advertisement
Graf_Spee

Untitled

Dec 14th, 2014
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 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)
  8. /*
  9.  
  10. 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
  11.  
  12. */
  13. {
  14. int contador; /* declaramos um contador */
  15. for(contador = 0; contador < tamanho_string1; contador++) /* efetuamos um for de 0 até o tamanho da string1 */
  16. {
  17. stringC[contador] = stringA[contador]; /* dentro do for copiamos todos os caracteres de stringA para stringC */
  18. }
  19. /*
  20.  
  21. 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
  22.  
  23. */
  24. for(contador; contador <= tamanho_string1 + tamanho_string2; contador++)
  25. /*
  26.  
  27. 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
  28.  
  29. */
  30. {
  31. stringC[contador] = stringB[contador - tamanho_string1];
  32. /*
  33.  
  34. Dentro dele dizemos que a stringC na posição que estamos é igual a stringB na posição que estamos menos o tamanho da string1
  35.  
  36. */
  37. }
  38. }
  39.  
  40. /*
  41.  
  42. *Por que precisamos dizer que o segundo for é menor que ou igual ao tamanho de ambas as strings somadas?
  43.  
  44. 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
  45.  
  46. *Por que o segundo for é menor que ou igual e o primeiro é só menor que?
  47.  
  48. Nos materias sobre string aprendemos que no final de cada string existe um caractere especial que é: '\0'.
  49. 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'
  50. 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'.
  51. Já na segunda string é necessário copiar o '\0' para indicar para o computador que aquele é o final da string
  52.  
  53. *Por que copiamos para stringC[contador] o valor de stringB[contador - tamanho_string1]?
  54.  
  55. 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,
  56. uma vez que a stringA deve ser colocada antes da stringB.
  57. 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..
  58. Em seguida, nosso contador será 10, e o tamanho da string1 é 9, logo, estaremos copiando o caractere 1 da string2..
  59.  
  60. */
  61.  
  62.  
  63. int main()
  64. {
  65. char string1[] = "Meu nome e";
  66. char string2[] = " Fulano";
  67. char string3[256];
  68. int tamanho_s1 = 14;
  69. int tamanho_s2 = 7;
  70. ConcatenaString(string1, string2, string3, tamanho_s1, tamanho_s2);
  71. printf("String 1: %s\nString 2: %s\nString 3: %s\n", string1, string2, string3);
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement