Taglia una stringa in C

Lasha Khintibidze 30 marzo 2021
  1. Usa la funzione personalizzata per tagliare una stringa in C
  2. Usa un’altra funzione personalizzata per tagliare una stringa in C
Taglia una stringa in C

Questo articolo spiegherà diversi metodi su come tagliare una stringa in C.

Usa la funzione personalizzata per tagliare una stringa in C

Le funzioni di trimming delle stringhe non fanno parte delle utilità di stringa della libreria C standard o fornite dalle funzioni conformi a POSIX, quindi è necessario implementare la funzionalità da soli. In questo esempio, implementiamo la funzione denominata trimString che accetta un singolo argomento del puntatore char e restituisce il puntatore alla stringa tagliata. Notare che noi, come chiamanti, siamo responsabili del passaggio della stringa che può essere modificata. In questo caso, abbiamo usato strdup per duplicare str1, e quando viene usata la stringa, dovrebbe essere liberata usando la chiamata free.

La funzione trimString è implementata in modo che itera sulla stringa carattere per carattere, e mentre quella data è uno spazio, incrementa il puntatore di uno. In breve, questo cicli while sposta il puntatore char sul primo carattere non spazio, tagliando il prefisso della stringa. Successivamente, il puntatore incrementato viene controllato se il valore è uguale a null, il che implica che la stringa data non aveva caratteri non spazi; quindi restituiamo il null per denotare il caso di errore. Il bucle Conseguente while rimuove gli spazi alla fine della stringa spostando il puntatore alla fine della stringa all’indietro uno alla volta. Una volta che il bucle incontra il carattere non spazio, si ferma e l’istruzione successiva mette il carattere \0 alla fine di esso.

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

char *trimString(char *str)
{
    char *end;

    while(isspace((unsigned char)*str)) str++;

    if(*str == 0)
        return str;

    end = str + strlen(str) - 1;
    while(end > str && isspace((unsigned char)*end)) end--;

    end[1] = '\0';

    return str;
}

int main(void) {
    const char *str1 = "  temporary string     ";

    printf("%s\n", str1);

    char *tmp = strdup(str1);
    printf("%s\n", trimString(tmp));

    free(tmp);
    exit(EXIT_SUCCESS);
}

Produzione:

  temporary string     
temporary string

Usa un’altra funzione personalizzata per tagliare una stringa in C

Simile alla precedente funzione di trimming, trimString2 è implementato per rimuovere gli spazi da entrambi i lati della stringa. Il primo cicli while calcola il numero di spazi alla fine della stringa e il secondo bucle sposta il puntatore sul primo carattere non spazio. Alla fine delle istruzioni del bucle, len contiene il numero di caratteri nella stringa tagliata generata dalla funzione strndup. Si noti che il puntatore restituito dalla funzione strndup dovrebbe essere libero dal chiamante per evitare perdite di memoria.

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

char *trimString2(char *str)
{
    size_t len = strlen(str);

    while(isspace(str[len - 1])) --len;
    while(*str && isspace(*str)) ++str, --len;

    return strndup(str, len);
}

int main(void) {
    char *str2 = "       temporary string  ";

    printf("%s\n", str2);

    char *s = trimString2(str2);
    printf("%s\n", s);

    free(s);
    exit(EXIT_SUCCESS);
}

Produzione:

     temporary string  
temporary string

Articolo correlato - C String