Verifique se a string contém substring em C

Jinku Hu 12 outubro 2023
  1. Use a função strstr para verificar se uma string contém uma substring em C
  2. Use a função strcasestr para verificar se uma string contém uma substring
  3. Use a função strncpy para copiar uma substring
Verifique se a string contém substring em C

Este artigo explicará vários métodos de como verificar se uma string contém uma determinada substring em C.

Use a função strstr para verificar se uma string contém uma substring em C

A função strstr é parte dos recursos de string da biblioteca padrão C e é definida no cabeçalho <string.h>. A função leva dois argumentos de ponteiro char, o primeiro denotando a string a ser pesquisada e o outro denotando a string a ser pesquisada. Ele encontra o primeiro endereço inicial da substring fornecida e retorna o ponteiro correspondente para char. Se a substring não for encontrada na primeira string de argumento, o ponteiro NULL será retornado.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Resultado:

found substring at address 0x55edd2ecc014

Use a função strcasestr para verificar se uma string contém uma substring

strcasestr não faz parte dos recursos da biblioteca padrão, mas é implementado como uma extensão na biblioteca GNU C, que pode ser indicada com a definição da macro _GNU_SOURCE. Uma vez definida, podemos chamar a função strcasestr para encontrar a primeira ocorrência da substring fornecida. Porém, lembre-se de que esta função ignora o caso de ambas as strings.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Resultado:

found substring at address 0x55edd2ecc014

Use a função strncpy para copiar uma substring

Alternativamente, pode-se copiar a substring fornecida para um novo buffer usando a função strncpy. Leva três argumentos, o primeiro dos quais é o ponteiro char de destino onde a substring copiada será armazenada. O segundo argumento é a string de origem e o último argumento denota o primeiro número de bytes a copiar no máximo. Observe que se o byte nulo não for encontrado nos primeiros bytes da string de origem, a string de destino não terá terminação nula.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Resultado:

This
string lit
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C String