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

    [C] Confronto tra stringhe

    Ragazzi scusate volevo sapere se potete dirmi come confrontare 2 stringhe senza usare la funzione di libreria "strcmp()" sapete come fare?

    perchè io sono portato a fare questo:

    #include <stdio.h>
    #define MAX 100

    int main () {

    char input[MAX];
    char help[MAX]={"ciao"};
    scanf("%s",input);

    if (help==input) printf("ok\n");

    ...se digito ciao dovrebbero essere uguali la stringa help e la stringa input, ma non stampa quello ke gli ho detto...ho letto anke ke non potrei usare "==" tra 2 stringhe...e allora come fare??
    grazie x le risposte
    "E' giunta l'ora, amiche care, ormai di chiacchierar, di cappellini di chiffon di cavoli o di re, di come il mare va in bollor se i gatti san volar"

  2. #2
    nessuna possibiltà in C, dovresti passare al C++.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    L'unica cosa che puoi fare è "emulare" la funzione strcmp() con una tua funzione, che confronta, carattere per carattere, le due stringhe...


    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

  4. #4
    sisi so dell'esistenza della funzione strcmp ma il testo dell'esercizio dice specificamente di non usare le funzioni della libreria string.h quindi non posso usare strcmp quindi come posso fare?
    "E' giunta l'ora, amiche care, ormai di chiacchierar, di cappellini di chiffon di cavoli o di re, di come il mare va in bollor se i gatti san volar"

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da LeleFT
    L'unica cosa che puoi fare è "emulare" la funzione strcmp() con una tua funzione, che confronta, carattere per carattere, le due stringhe...


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da carloekekko
    sisi so dell'esistenza della funzione strcmp ma il testo dell'esercizio dice specificamente di non usare le funzioni della libreria string.h quindi non posso usare strcmp quindi come posso fare?
    Emulare la strcmp(), appunto, cioè dovresti scrivere tu il codice per fare il confronto delle stringhe proprio come fa la strcmp() senza ricorrere direttamente a questa...

    Non è difficile da scrivere: devi innanzitutto confrontare le lunghezze delle stringhe in questione (se sono diverse sicuramente non potranno essere uguali) e poi - se le dimensioni corrispondono - le confronti carattere per carattere...
    every day above ground is a good one

  7. #7
    ah si è vero! yevon potresti darmi qualke altra indicazione?
    grazie infinite
    "E' giunta l'ora, amiche care, ormai di chiacchierar, di cappellini di chiffon di cavoli o di re, di come il mare va in bollor se i gatti san volar"

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sai come accedere ai singoli caratteri della stringa?

    Sai che la stringa termina quando incontri il carattere binario 0?

    Comincia a scrivere qualche linea di codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    int main () {

    char input[MAX];
    char help[MAX]={"ciao"};
    char c;
    int i;
    for(i=0;i<MAX;++i){
    c=getchar();
    printf ("%c",c);}

    getche();
    return 0;
    }
    in questo modo?
    "E' giunta l'ora, amiche care, ormai di chiacchierar, di cappellini di chiffon di cavoli o di re, di come il mare va in bollor se i gatti san volar"

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Devi innanzitutto confrontare la lunghezza delle stringhe, come ti dicevo. Anzi, ora che ci faccio caso devi implementare una piccola funzione anche per fare quello visto che se ricorri alla strlen() siamo punto e a capo.

    Fatti quindi prima una piccola funzione che conti i caratteri della stringa: non devi fare altro che un ciclo iterativo che incrementi un contatore finché la stringa non è finita. Il valore finale di quel contatore sarà la lunghezza della tua stringa (in realtà, per fare la cosa fine, non ci sarebbe nemmeno bisogno del contatore...)

    Fai lo stesso ciclo iterativo per le due stringhe. Se le dimensioni trovate sono uguali, procedi, altrimenti ti fermi perché di sicuro le stringhe saranno diverse.

    Come procedere?

    Se s e t sono le stringhe e n la dimensione (uguale per entrambe, a questo punto), ti basta fare:

    codice:
    i := 0;
    FINCHE' i < n
       SE (s[i] DIVERSO DA t[i])
          return FALSO;
       i := i + 1;
    
    return VERO;
    in pratica appena nel ciclio si verifica che le stringhe hanno un carattere diverso, la funzione restitiusce "FALSO" perché sicuramente le due stringhe non potranno più essere uguali (quindi non c'è nemmeno bisogno di continuare il ciclo).

    Se invece per tutto il ciclo è sempre risultato s[i] = t[i], allora le stringhe sono uguali e la funzione restituisce "VERO".

    Ovviamente, questa non è un implementazione esatta della strcmp(), perché quest'ultima restituisce -1, 0 o 1 a seconda che le stringhe siano uguali o la prima minore/maggiore dell'altra (lessicograficamente).

    Se devi solo verificare se le stringhe sono uguali o diverse, va bene come ti ho detto... altrimenti la situazione cambia un po'.
    every day above ground is a good one

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.