Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /* Escreva uma funcão que concatene duas strings dadas A e B numa nova string C
- (ex: se A = “Perdias chaves ” e B = “do carro”, então C = “Perdi as chaves do carro”): */
- 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
- */
- {
- int contador; /* declaramos um contador */
- for(contador = 0; contador < tamanho_string1; contador++) /* efetuamos um for de 0 até o tamanho da string1 */
- {
- stringC[contador] = stringA[contador]; /* dentro do for copiamos todos os caracteres de stringA para stringC */
- }
- /*
- 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
- */
- 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
- */
- {
- 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
- */
- }
- }
- /*
- *Por que precisamos dizer que o segundo for é menor que ou igual ao tamanho de ambas as strings somadas?
- 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
- *Por que o segundo for é menor que ou igual e o primeiro é só menor que?
- 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'
- 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
- *Por que copiamos para stringC[contador] o valor de stringB[contador - tamanho_string1]?
- 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.
- 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..
- Em seguida, nosso contador será 10, e o tamanho da string1 é 9, logo, estaremos copiando o caractere 1 da string2..
- */
- int main()
- {
- char string1[] = "Meu nome e";
- char string2[] = " Fulano";
- char string3[256];
- int tamanho_s1 = 14;
- int tamanho_s2 = 7;
- ConcatenaString(string1, string2, string3, tamanho_s1, tamanho_s2);
- printf("String 1: %s\nString 2: %s\nString 3: %s\n", string1, string2, string3);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement