Funções STR
Funções Básicas para Manipulação de Strings
As funções para manipulação de strings apresentadas nesta página,
são versões alternativas para as funções que estão no arquivo cabeçalho string.h.
StrCpy - Copia o conteúdo de uma string para outra e coloca um terminador de string (\0).
Sua sintaxe é StrCpy (destino, origem).
No arquivo cabeçalho string.h , sua sintaxe é strcpy(destino, origem).
StrCat - StrCat concatena duas strings, adicionando o conteúdo da segunda ao
final da primeira, além do terminador (\0).
Note que a primeira string deve ter espaço suficiente para conter a segunda,
para que natilde;o ocorra um "estouro de buffer".
Para melhor aproveitamento do código, utilizei a função StrCpy após ter caminhado com o ponteiro
até o final da str1. <--Veja a função StrCat no código abaixo-->
No arquivo cabeçalho string.h , sua sintaxe é strcat(str1, str2).
StrLen - StrLen retorna o tamanho, em caracteres, de uma string dada.
Na verdade o StrLen() procura o terminador de string (/0)
e calcula a distância dele ao início da string.
No arquivo cabeçalho string.h , sua sintaxe é strlen(str1).
Outras Funções:
Função para verificar tamanho da String - Recursiva
tamStr(char *str, int cont)
Função para imprimir caracteres da String
imprimeStr(char str)
Função para inverter String - Recursiva
inverteStr(char *str, int i)
Código
#include <stdio.h>
#include <stdlib.h>
void StrCpy(char *dest, char *orig) {
while (*orig) {
*dest = *orig;
dest++;
orig++;
}
*dest = '\0';
}
void StrCat(char *str1, char *str2) {
while (*str1)str1++;
StrCpy(str1, str2);
}
int StrLen(char *orig) {
int cont = 0;
while (*orig++)cont++;
return cont;
}
//Funcao para verificar tamanho da String - Recursiva
int tamStr(char *str, int cont) {
return (*str++) ? cont++, tamStr(str, cont) : --cont;
}
//Funcao para imprimir caracteres da String
void imprimeStr(char str) {
printf("%c", str);
}
//Funcao para inverter String - Recursiva
void inverteStr(char *str, int i) {
(i) ? imprimeStr(str[i]), inverteStr(str, --i) : imprimeStr(str[i]);
}
int main() {
setbuf(stdout, NULL);
char ch[20] = "face", ch2[20];
printf("Entre com uma palavra: ");
fflush(stdin);
gets(ch2);
StrCpy(ch, ch2);
printf("%s\n", ch);
StrCat(ch, ch2);
printf("%s\n", ch);
printf("%d", StrLen(ch));
printf("** Inverte String **\n\n");
char str[100];
printf("Digite a String: ");
fflush(stdin);
gets(str);
printf("String invertida: ");
inverteStr(str, tamStr(str, 0));
return 0;
}
Desafio
strcmp
Se você tentar criar duas strings com o mesmo conteúdo e compará-las como faria com números,
verá que elas "não são iguais.
Isso ocorre porque, na verdade, o que está sendo comparado
são os endereços de memória onde estão guardadas as strings.
Para comparar o conteúdo de duas strings, você deve usar a função strcmp (ou suas variantes).
Implemente um código em C para a função StrCmp.
int StrCmp (char *s1, char *s2);
O valor de retorno é:
menor que zero se s1 for menor que s2;
igual a zero se s1 e s2 s?o iguais;
maior que zero se s1 for maior que s2.
Costuma parecer estranho dizer que uma string é menor ou maior que outra; na verdade essa comparação é
entre a primeira letra que difere nas duas strings.
Assim, se tivermos s1 = "abc" e s2 = "abd", diremos que s2 é maior que s1,
pois na primeira posiccedil;ão em que as duas strings diferem, a letra em s2 é "maior".
É importante notar que a compara??o feita por StrCmp distingue mai?sculas de min?sculas.
Isto é, as strings "ABC" e "abc" não são iguais para essa função.
As variantes mais usadas de strcmp s;ão:
strncmp - compara apenas os n primeiros caracteres das duas strings, sendo n um terceiro argumento.
stricmp - compara duas strings sem distin??o entre mai?sculas e min?sculas. A sintaxe é igual à de strcmp.
Essa função não faz parte da biblioteca padrão, mas é comumente encontrada
como extensão particular de várias delas.