Blupixel IT Blog – Articoli e Tutorial Informatica e Programmazione

Blog ufficiale di Blupixel IT Srl

Cercare una stringa in un array in C/C++

Purtroppo il linguaggio di programmazione C non è così immaediato come può essere il PHP o il C#.
Quindi per cercare un valore all’interno di un array, specialmente se gli array non sono di tipo vector ma di tipo char** allora sicuramente non troverete nelle librerie standard un metodo per farlo in automatico.

Un’aspetto negativo dell’uso del char** anzichè del vector sta nel fatto che non è possibile usare iteratori e che inoltre è indispensabile conoscere la lunghezza dell’array prima di fare la ricerca per evitare di andare in “Segmentation Fault”.

Per chi si fosse imbattuto già in questo errore ma non sapesse ancora di cosa sis tratta posso dire che l’errore Segmentation Fault avviene nella maggior parte dei casi perchè si sta cercando di accedere (in lettura o in scrittura) ad un elemento dell’array al di fuori dell’array inizializzato.
Così, se per esempio, avete un array

int* arr = new int[5];

 

Avrete a disposizione in lettura e scrittura i soli valori arr[0], arr[1], arr[2], arr[3], arr[4]. Se cercate di accedere quindi ad arr[5] o arr[10] e così via, otterrete un bel “Segmentation fault”!

Per questo nella funzione di ricerca della stringa è indispensabile conoscere da prima la lunghezza dell’array, perchè con i puntatori non si può conoscere la lunghezza, nè si può verificare se l’elemento con indice X esiste o no…

Ma adesso vediamo la funzione:

#include
#include
#include 

using namespace std;

int array_search(char** input, int input_length, char* search) {

    int result = -1;
    string tmp;

    for(int i = 0; i < input_length; i++) {
        if (strcmp(input[i], search) == 0) {
              result = i;
              break;
        }
    }

    return result;

}

 

Nella funzione semplicemente prendiamo in ingresso: il char** contenente l’array in cui cercare, la sua lunghezza, la parola da cercare.
La funzione scorre l’array, confronta il tutto e interrompe il ciclo se trova un risultato.
Ritorna -1 se non trova niente o il valore dell’indice (da 0 a input_length-1) in cui la stringa è stata trovata.

Purtroppo la funzione è CASE SENSITIVE, vuol dire che “Paperino” è diverso da “paperino”. Per farla case insensitive bisogna renderla un po’ più complessa.

A presto

Your email address will not be published. Required fields are marked *

*

rYnsf

Please type the text above: