Advertisement
Graf_Spee

[FUNC] Concatenar duas Strings

Dec 14th, 2014
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 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[] = "u 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