Tronca la stringa in C

Jinku Hu 12 ottobre 2023
Tronca la stringa in C

Questo articolo introdurrà più metodi su come troncare la stringa in C.

Usa la funzione personalizzata con l’aritmetica del puntatore per troncare la stringa

Poiché le stringhe in C sono solo array di caratteri terminati con byte nullo - \0, possiamo implementare una funzione personalizzata che sposta il puntatore corrente all’inizio della stringa del numero di posizioni specificato e restituisce un nuovo valore del puntatore.

Nota però, ci sono due problemi; il primo è che dobbiamo avere la possibilità di troncare la stringa data da sinistra o da destra e il secondo è che spostare il puntatore non è sufficiente dal lato destro della stringa poiché il byte nullo deve essere inserito per denotare la fine. Quindi, definiamo la funzione truncString che prende la stringa e diversi caratteri da troncare dalla stringa. Il numero può essere negativo, indicando il lato da cui rimuovere il numero di caratteri dato. Successivamente, recuperiamo la lunghezza della stringa utilizzando la funzione strlen, che implica che l’utente sia responsabile del passaggio della stringa valida. Quindi, confrontiamo la lunghezza con il numero di caratteri da troncare e quindi passiamo alla manipolazione del puntatore.

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

char *truncString(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str = str + pos;
    else
      str[len + pos] = 0;
  }

  return str;
}

int main(void) {
  char *str1 = "the string to be truncated";

  printf("%s\n", str1);
  printf("%s \n", truncString(strdupa(str1), 4));
  printf("%s \n", truncString(strdupa(str1), -4));

  exit(EXIT_SUCCESS);
}

Produzione:

the string to be truncated
string to be truncated
the string to be trunc

Assegniamo semplicemente il valore 0 alla posizione del carattere calcolata sottraendo la lunghezza della stringa e il numero passato. Quindi, abbiamo spostato la fine della stringa e la stampa del suo valore può essere eseguita con il vecchio puntatore.

In alternativa, possiamo implementare la funzione simile truncString2 con lo stesso prototipo ma tronca la stringa al numero di caratteri passati come secondo argomento. Il segno del numero indica il lato da cui formare la nuova stringa, vale a dire, il numero intero positivo indica il lato sinistro e il negativo - l’opposto.

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

char *truncString2(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str[pos] = 0;
    else
      str = &str[len] + pos;
  } else {
    return (char *)NULL;
  }

  return str;
}

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

  printf("%s\n", str2);
  printf("%s \n", truncString2(strdupa(str2), 6));
  printf("%s \n", truncString2(strdupa(str2), -6));

  exit(EXIT_SUCCESS);
}

Produzione:

the string to be truncated
string to be truncated
the string to be trunc
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