Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Descobrir o tamanho
  2. Copiar string
  3. Comparar strings
  4. Buscar caracter/substring
  5. Separar string

Anteriormente, aprendemos algumas operações básicas aplicadas sobre o tipo string. Algumas delas foram feitas manualmente como a cópia e verificação de tamanho de uma string.

Nesta parte do tutorial vamos estudar algumas outras operações importantes para manipulação de strings : cópia, separação, concatenação e outras, utilizando a biblioteca <string.h>.

Para entender como um ponteiro funciona, visite a seção C: Ponteiro.

Para descobrirmos o tamanho de uma string, podemos percorrer seu conteúdo com um comando de repetição, até que o terminado ‘\0’ seja encontrado. Porém, a biblioteca strings.h nos fornece a função strlen.

Sintaxe
size_t strlen(const char *str)
Onde
str: ponteiro para a string.
Retorno
 unsigned long int ou size_t contendo o tamanho da string apontada por *str.
Exemplo 1
#include <stdio.h>
#include <string.h>

void main (void)
{
    char minha_string[]="minha string para teste da funcao strlen";
    printf("%ld",strlen(minha_string));
}
Saída
40

Ao trabalhar com strings relativamente pequenas, podemos utilizar o casting do tipo size_t para o tipo não sinalizados de char ou short.

Exemplo 1
#include <stdio.h>
#include <string.h>

void main (void)
{
    char minha_string[]="minha string para teste da funcao strlen";
    unsigned char tamanho = strlen(minha_string); 
    printf("%d",tamanho);
}
Saída
40

Para copiarmos uma string, podemos percorrer seu conteúdo com uma comando de repetição e copiar elemento a elemento, até que o terminado ‘\0’ seja encontrado. Porém, a biblioteca strings.h nos fornece a função strcpy.

Sintaxe
char *strcpy(char *dest, const char *src)
Onde
dest : ponteiro para string de destino da cópia.
src: ponteiro para string de origem da cópia.
Retorno
*dest apontando para a string copiada.
Exemplo 2
#include <stdio.h>
#include <string.h>

void main (void)
{
    char minha_string[]="string que sera copiada";
    
    long int tamanho = strlen(minha_string);
    
    char destino[tamanho] = NULL;    
    strcpy(destino,minha_string);
    
    printf("%s\n",destino);
    strcpy(destino,"uma string como argumento\n");
    printf("%s",destino);
}
Saída
string que sera copiada
uma string como argumento

Podemos concatenar ou "juntar" duas strings em uma única string, podemos usar a função strcatc. O uso deve ser visto na sintaxe abaixo:

Sintaxe
char *strcat(char *dest, const char *src)
Onde
dest: ponteiro para string de destino da concatenação. Deve conter espaço suficiente.
src: ponteiro para string para concatenar.
Retorno
*dest apontando para a string copiada.
Exemplo 3
#include <stdio.h>
#include <string.h>

void main (void)
{
    char string1[]="string1 concatenada ";
    char string2[]="com a string2 ";
    
    long int tamanho = strlen(string1) + strlen(string1);
    
    char resultado[tamanho];
    
    strcat(resultado,string1);
    strcat(resultado,string2);
    
    printf("%s",resultado);
}
Saída
string1 concatenada com a string2 

Quando precisamos comparar caracteres, números inteiros e etc, utilizamos os operadores de comparação. Porém, quando lidamos com strings, em C, não podemos utilizar esses operadores para comparação. Nessa situação, utilizamos a função strcmp.

Sintaxe
int strcmp(const char *str1, const char *str2)
Onde
dest : ponteiro para string origem da comparação.
src: ponteiro para string para comparação.
Retorno
< 0 : str1 é menor que str2.
> 0 : str2 is menor que str1.
= 0 : str1 é igual a str2<

Os valores retornados diferentes de 0 são referentes à diferença entre os valores númericos ascii dos caracteres comparados.

Exemplo 4
#include <stdio.h>
#include <string.h>

int main (void)
{
    char string1[]="abcd";
    char string2[]="abcd";
    char string3[]="ABCD";
    
    printf("strcmp: %d \n", strcmp(string1,string2)); //igual
    printf("strcmp: %d \n", strcmp(string3,string1)); // A < a
    printf("strcmp: %d \n", strcmp(string2,string3)); // a > A
    
  return 0;
}
Saída
strcmp: 0 
strcmp: -32 
strcmp: 32 

Para buscarmos uma palavra ou sequência de caracteres dentro de uma string, podemos utilizar a função strstr.

Sintaxe
char *strstr( const char *string1 , const char *string2);
Onde
string1: ponteiro para string onde a procura será feita.
string2: ponteiro para string que será procurada.
Retorno
Ponteiro para o primeiro caracteres, em string1 quando string2 encontrada.
NULL se string2 não for encontrada.
Exemplo 5
#include <stdio.h>
#include <string.h>

void main ()
{
  char string1[] ="String em que vamos buscar isso";
  char palavra[] = "isso";
  
  char *substring = strstr(string1,palavra);
  
  if (substring != NULL)
    printf("O termo \"%s\" foi encontrado!",palavra);
  else
    printf("O termo \"%s\" não foi encontrado!",palavra);
}
Saída
O termo "isso" foi encontrado!

Para buscarmos a ocorrência de um ou mais caracteres dentro de uma string, podemos utilizar a função strpbrk. Essa função irá buscar um ou mais caracteres e retornar um ponteiro para a primeira ocorrência encontrada.

Sintaxe
const char *strpbrk( const char * string1, const char * string2);
Onde
string1: ponteiro para string onde a procura será feita.
string2: ponteiro para string contendo caracteres para busca.
Retorno
Ponteiro para a primeira ocorrência do caractere encontrado em string1.
NULL se nenhum caractere for encontrado.
Exemplo 6
#include <stdio.h>
#include <string.h>

void main ()
{
  char string1[] = "Minha string ";
  
  char caracteres[] = "axyz";
  
  char *retorno = strpbrk (string1, caracteres);

  if(retorno != NULL)
  {
    printf ("%c \n" , *retorno); //retorno em formato string
  }
}
Saída
a

Quando precisamos "quebrar" uma string em várias palavras ou tokens, utilizamos a função strtok. Essa função irá dividir um string em várias partes utilizando um ou mais separadores.

Sintaxe
char *strtok(char *str, const char *delim)
Onde
str: ponteiro para string que será dividida.
delim: ponteiro para lista de separadores para divisão.
Retorno
Ponteiro para a primeira ocorrência da palavra ou token encontrado.
NULL se não houver mais palavras ou tokens restantes em str para buscar.

Para cada ocorrência de um separador, um termo será retornado pela função. Após a primeira chamada da função, as chamadas posteriores devem ser feitas passando NULL para o primeiro argumento.

Exemplo 7
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="Essa;string;sera;quebrada;em;palavras";
  
  char * retorno = strtok (str,";");
  
  while (retorno != NULL)
  {
    printf ("%s\n",retorno);
    retorno = strtok(NULL, ";");
  }
}
Saída
Essa
string
sera
quebrada
em
palavras
  1. 08/10/2024 - revisão 2 - Ajustes pontuais
  2. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, ajustes em exemplos e layout
  3. 19/05/2023 - versão inicial