Controlla se la stringa contiene una sottostringa in C

Jinku Hu 12 ottobre 2023
  1. Usa la funzione strstr per verificare se una stringa contiene una sottostringa in C
  2. Usa la funzione strcasestr per verificare se una stringa contiene una sottostringa
  3. Usa la funzione strncpy per copiare una sottostringa
Controlla se la stringa contiene una sottostringa in C

Questo articolo spiegherà diversi metodi su come verificare se una stringa contiene una determinata sottostringa in C.

Usa la funzione strstr per verificare se una stringa contiene una sottostringa in C

La funzione strstr fa parte delle strutture per le stringhe della libreria standard C, ed è definita nell’intestazione <string.h>. La funzione accetta due argomenti del puntatore char, il primo che denota la stringa in cui cercare e l’altro che denota la stringa da cercare. Trova il primo indirizzo iniziale della sottostringa data e restituisce il puntatore corrispondente a char. Se la sottostringa non viene trovata nella prima stringa dell’argomento, viene restituito il puntatore NULL.

#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);
}

Produzione:

found substring at address 0x55edd2ecc014

Usa la funzione strcasestr per verificare se una stringa contiene una sottostringa

strcasestr non fa parte delle funzionalità della libreria standard, ma è implementato come estensione nella libreria GNU C, che può essere indicata con la definizione della macro _GNU_SOURCE. Una volta definita, possiamo chiamare la funzione strcasestr per trovare la prima occorrenza della sottostringa data. Ricorda però che questa funzione ignora il caso di entrambe le stringhe.

#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);
}

Produzione:

found substring at address 0x55edd2ecc014

Usa la funzione strncpy per copiare una sottostringa

In alternativa, si può copiare la sottostringa data in un nuovo buffer usando la funzione strncpy. Richiede tre argomenti, il primo dei quali è il puntatore char di destinazione in cui verrà memorizzata la sottostringa copiata. Il secondo argomento è la stringa di origine e l’ultimo argomento indica al massimo il primo numero di byte da copiare. Si noti che se il byte null non viene trovato nei primi byte della stringa di origine, la stringa di destinazione non avrà terminazione null.

#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);
}

Produzione:

This
string lit
Autore: 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

Articolo correlato - C String