Controlla se la stringa contiene una sottostringa in C
-
Usa la funzione
strstr
per verificare se una stringa contiene una sottostringa in C -
Usa la funzione
strcasestr
per verificare se una stringa contiene una sottostringa -
Usa la funzione
strncpy
per copiare una sottostringa
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
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