Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    27

    [C] generare automaticamente stringhe

    Ho bisogno di fare in modo che il mio programma generi automaticamente delle stringhe che siano sempre diverse. Come posso fare?? Esiste qualche libreria predefinita??

    Io avevo trovato una soluzione un po' strana ma funzionale:

    codice:
    char *codice="trituoeowyeiuyfoiuer" (ovviamente stringa lunga a sufficienza)
    main(){
       ...
       ...
       codice++;
    }
    Il codice mi legge i primi 4 caratteri e poi scala di un carattere. A parte il fatto che è una soluzione orrenda, e vabbè, il problema è che se chiudo il programma e lo riavvio nuovamente il puntatore "codice" ovviamente torna al suo valore iniziale e genera nuovamente la prima stringa. (in questo caso "trit") mantre io voglio che anche in caso di chiusura del programma le stringhe generate da un secondo avvio siano diverse!! Spero di essermi spiegato un minimo...

    Vi prego, aiutatemi!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se hai bisogno di stringhe di caratteri casuali, potresti utilizzare la funzione rand() in questo modo:
    codice:
    char stringa[lunghezza];
    srant(time(NULL));
    for (int i=0; i<lunghezza; i++) {
       stringa[i] = ((char) (rand() % 26) + 65);
    }
    In questo modo generi delle stringhe lunghe lunghezza e composte da caratteri alfabetici maiuscoli a caso.
    Puoi, ovviamente, modificare il codice in modo da renderlo più carino:
    codice:
    int i = 0;
    int b = 0;
    char stringa[lunghezza];
    srant(time(NULL));
    for (i=0; i<lunghezza; i++) {
       b = rand() % 2;
       stringa[i] = ((char) (rand() % 26) + 65);
       stringa[i] = b ? stringa[i]|32 : stringa[i];
    }
    In questo modo generi una stringa composta di caratteri alfabetici sia maiuscoli che minuscoli casuali, eccetera...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    27
    Grazie mille, era proprio ciò che mi serviva! Solo, una cosaotresti spiegarmi cosa significa srant(time(NULL))?

    Grazie!!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' solo un errore di digitazione: sostituisci con srand(time(NULL));
    E' l'istruzione per l'inizializzazione del seme per il generatore dei numeri casuali.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Così si fa un passaggio in meno:
    codice:
    int i = 0;
    int b = 0;
    char stringa[lunghezza];
    srant(time(NULL));
    for (i=0; i<lunghezza; i++) {
       b = rand() % 2;
       stringa[i] = ((char) (rand() % 26) + 65) | b ? 32 : 0;
    }
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.