Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C] Confronto stringhe con parole variabili

    Salve a tutti!

    Ho un problema che riguarda il confronto tra stringhe: devo realizzare un programma che gestisce liste, pile e code e fin qui non ci sono problemi. Il problema principale è che devo realizzare un sistema in cui l'utente inserisce una stringa di testo che rappresenta il comando da eseguire e, in base a questa, viene eseguito il task corrispondente.
    Ad esempio, se l'utente digita:

    codice:
    "crea <nomeCollezione> come <tipoCollezione> di <tipoElementiCollezione>"
    oppure

    codice:
    "inserisci in <nomeCollezione> il valore <valore> in testa"
    io devo interpretare la stringa e, di conseguenza, eseguire il comando corrispondente. Le parole tra parentesi angolate ("< >") sono delle etichette per indicare il nome della collezione di dati (ad esempio, Collezione1, MiaCollezione, etc., come nomi di variabili), il tipo della collezione (ad esempio, lista, pila o coda) e, infine, il tipo di elementi che deve contenere la collezione (ad esempio, int, char o char *).

    C'è un modo che non sia il confronto carattere per carattere per interpretare questi pattern?

    Grazie per la pazienza e per la collaborazione.

  2. #2
    Come saprai in C non esiste il tipo string per cui qllo che in C++ facciamo con ql tipo dovrai farlo manualmente ovvero confrontandone un carattere alla volta. Del resto è proprio qsto che fanno la strcpy, strcmp eccetera (funzioni per stringhe).

    Diversamente puoi fare il menù cn le opzioni:
    "inserisci 1 se <tipo>, 2..." e così via e qndi un confronto tra numeri è molto + semplice.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    i metodi per compare due stringhe in c dovrebbero essere:

    Codice PHP:
    memcmp     Compare two blocks of memory (function)
    strcmp     Compare two strings (function)
    strcoll     Compare two strings using locale (function)
    strncmp     Compare characters of two strings (function)
    strxfrm     Transform string using locale (function) 
    cogli l'attimo

  4. #4
    Non so se senza la libreria funzionino ma nel caso dovessero andare anche in C la sintassi è:
    strcmp (str1,str2);
    RICORDA: ritorna "vero" se sono diverse, falso in caso contrario.
    Se quindi vuoi vedere se l'utente ha immesso il nome giusto devi usare l'opreatore NOT:

    codice:
    if (!strcmp(str1, str2)){ //se corrispondenti...}
    in caso contrario

    codice:
    if (strcmp(str1, str2)){ //se diverse...}

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    Returns an integral value indicating the relationship between the strings:
    A zero value indicates that both strings are equal.
    A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2; And a value less than zero indicates the opposite.
    cogli l'attimo

  6. #6
    Grazie a tutti per l'aiuto. Mr. Vinnie, credo che la funzione strcmp() ritorni 0 se le due stringhe SONO uguali. Quanto all'esercizio, sarebbe comodissimo anche per me creare un menu numerico così sarebbe tutto più semplice però purtroppo è più complesso...
    Pensavo ci fosse un modo più rapido per confrontare due stringhe a meno di qualche sostituzione ma purtroppo, da quanto ho capito, non è possibile.
    La mia soluzione sarà quella di suddividere la stringa in input in token (cioè in parole), le memorizzerò in un array di stringhe e le confronterò con strcmp(). Se avete altri suggerimenti, io sono sempre qui!

  7. #7
    NO, al contrario di quanto ha detto c_junior e di quanto pensi tu (lo pensavo anche io) la strcmp ritorna vero se sono DIVERSE.

    citazione:
    <<Per utilizzare strcmp() è fondamentale ricordare che restituisce falso quando le stringhe coincidono. Pertanto sarà necessario utilizzare l'operatore ! (NOT) se si desidera che accada qualcosa quando le stringhe sono uguali [...]>>

    Tratto da:
    Guida al C++ (terza edizione), Herbert Shildt.
    Sappiamo assumere sembianze Mortali.

  8. #8
    Anzi anche c_junior ha scritto la stessa cosa ora che rileggo:
    zero value = falso, infatti.
    Sappiamo assumere sembianze Mortali.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Mr. Vinnie
    NO, al contrario di quanto ha detto c_junior e di quanto pensi tu (lo pensavo anche io) la strcmp ritorna vero se sono DIVERSE.

    citazione:
    <<Per utilizzare strcmp() è fondamentale ricordare che restituisce falso quando le stringhe coincidono. Pertanto sarà necessario utilizzare l'operatore ! (NOT) se si desidera che accada qualcosa quando le stringhe sono uguali [...]>>

    Tratto da:
    Guida al C++ (terza edizione), Herbert Shildt.
    La strcmp restituisce un intero, non un bool ...

    Quindi restituisce un "numero" ... 0 se le stringhe coincidono, -1 o un +1 se sono differenti

    Non si capisce se quel periodo tratto dal libro è riferito alla funzione strcmp (o ad altro codice in cui è usata la strcmp), ma nel primo caso, butta il libro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Ragazzi non vorrei di lungarmi in qsto tira e molla ma solo ricordare che 0 o falso in C++ hanno lo stessissimo medesimissimo significato. Algebra di Boole: Domanda- vero o falso?
    tabella dell'algebra di B.: domanda - 0 o 1;

    é lo stesso!
    Sappiamo assumere sembianze Mortali.

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.