Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Contare il numero di valori presenti in un array

    So già che questa domanda la fanno di continuo, ma io non ci sono ancora riuscito.
    Dunque.. Il linguaggio è C, e ho un array di caratteri di cui non conosco quante posizioni sono occupate.
    Quando ho dichiarato l'array gli ho assegnato 50 posizioni, però i caratteri vengono dati in input dall'utente, quindi l'array ha un numero di valori variabile.

    Ho letto di questa funzione presente in stdio.h:
    codice:
    sizeof(array)/sizeof(array[0])
    però non fa al caso mio, perché riporterebbe il numero di posizioni assegnate in memoria, e quindi dovrebbe stamparmi 50, ma io voglio conoscere le posizioni "occupate", con un valore diciamo

    Dopo una serie di tentativi sono arrivato a questa conclusione, funzionante:
    codice:
    int conta=0;
    while(array[conta]){
        conta++;
    }
    Non sapevo neanche che si potesse fare, è stato un errore fortunato.
    Penso che si possa interpretare così: Finché array[conta] esiste (ha un valore), incrementa conta.
    Alla fine stampando conta ho il numero di valori.

    Però non è il massimo in quanto ad "eleganza", e il mio prof sembra non gradire..
    Gli ho chiesto se in qualche libreria fosse presente una funzione che facesse al caso mio, e mi ha parlato del sizeof, che non ha risolto nulla.
    Ehm... La fatidica domanda: Esiste, in qualche libreria, una funzione del genere?

    Al mio prof non va bene che io definisca da solo le funzioni perché non le ha ancora spiegate

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    sizeof non è una funzione, ma un operatore del linguaggio.

    La soluzione che hai trovato tu può funzionare solo se hai esplicitamente azzerato il contenuto dell'array prima di riempirlo con i valori (perché nel momento dell'allocazione non hai alcuna garanzia che i valori iniziali siano tutti 0) e se l'utente inserisce solo ed esclusivamente valori diversi da 0; in tal caso, ti basterà cercare il primo elemento proprio uguale a 0 per determinare la fine dell'array "effettivo". In generale comunque l'unica soluzione è quella di segnare la fine dell'array con un valore "convenzionale" dopo l'immissione dei dati, anche se in realtà viene da chiedersi se non hai modo di sapere quanti valori ha immesso l'utente, o a quale indice dell'array è arrivato... come avviene l'immissione dei dati?
    every day above ground is a good one

  3. #3

    Re: [C] Contare il numero di valori presenti in un array

    Originariamente inviato da PJ123
    Quando ho dichiarato l'array gli ho assegnato 50 posizioni, però i caratteri vengono dati in input dall'utente, quindi l'array ha un numero di valori variabile.
    Hai praticamente solo due possibilità:
    • contare runtime i caratteri immessi dall'utente e portarti in giro quel valore;
    • (come ti ha detto YuYevon) bruciare uno dei valori possibili, assegnandogli il significato di fine array, previa inizializzazione di tutto l'array a quel valore!


    con sizeof puoi solo ottenere risultati a compile time, non runtime.

    p.s. in realtà ci sono anche altri metodi:
    • una sequenza di caratteri terminatori; ad esempio c'è una funzione della microsozz (non ricordo quale) che restituisce una lista di stringhe separate da 0 e terminata da 00;
    • Una pascal string, in cui il primo byte trasporta la lunghezza dell'array stesso (ovvio limitato a 255 elementi);
    • Una qualunque altra grammatica, che permetta di dedurre dal contenuto dell'array stesso, la sua fine (ad esempio vedi il formato tar, o robe del tipo.. <string>your string</string>, ecc.. ecc..)

  4. #4
    Il problema è che l'array è una stringa di caratteri, quindi non ha nessun indice, e non è una sequenza di dati immessa in input.
    E' una semplice parola che viene richiesta in input, quindi l'array viene caricato "tutto in una volta"..

    Non so se mi sono spiegato, non sono ancora pratico di questa terminologia
    Detto molto banalmente, in input viene richiesta una stringa di caratteri che assegna all'array pippo, come faccio a sapere quanto è lunga quella parola?

  5. #5
    Le stringhe C sono convenzionalmente terminate dal carattere 0. In questa maniera è possibile determinarne la lunghezza scorrendo l'array e fermandosi quando si incontra uno zero, che per inciso è ciò che fa il tuo ciclo while (la condizione che ci hai messo significa "finché il valore è vero", e vero in C è "diverso da zero").
    La funzionalità di quel while è fornita dalla funzione di libreria strlen, del file <string.h>·
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Originariamente inviato da PJ123
    Detto molto banalmente, in input viene richiesta una stringa di caratteri che assegna all'array pippo, come faccio a sapere quanto è lunga quella parola?
    come fa a dirti colui che inserisce la stringa, che ha terminato di inserirla? Potrebbe essere un ENTER, ma di fatto dipende dal contratto tra te e chi inserisce la stringa.

  7. #7
    Ecco, strlen della libreria string.h
    Era proprio quello che cercavo
    Grazie a tutti per le risposte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.