|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
[C] comparazione di stringhe
una domanda che epr molto potrebbe sembrare banale ma in linguaggio c voglio vedere se due stringhe sono uguali
girando su internet e sfogliando il manuale di c ho visto che e' possibile farlo con il comando strcmp che logicamnete utilizza la libreria string.h. allora se nella chiamata voglio comparare due stringhe scrivo: temp=strcmp(stringa1,"0") in pratica voglio vedere se la stringa1 e' uguale alla stringa "0". e metto il risultato di tale comparazione nella variabile intera temp visto che il comando strcmp restituisce -1 se la prima stringa e' minore della seconda, 0 se le stringhe sono uguali e 1 se la seconda e' piu' grande della prima. sperando di non aver sbagliato qualcosa fino ad adesso attendo una risposta |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Comunque sì, strcmp serve per confrontare due stringhe. Quote:
un valore < 0 se s1 < s2 un valore 0 se s1 = s2 un valore > 0 se s1 > s2 La domanda quale è? Se è corretto? Sì.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
la domanda e' :
come faccio a controntare la stringa string1 e la stringa "0"??non me lo fa |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per favore la prossima volta metti il linguaggio fra parentesi quadre prima del titolo della discussione
![]() |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Nov 2006
Messaggi: 71
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
if ((strcmp(stringa,"0"))==0) printf("trovato\n");
else printf(" non Trovato\n"); mi da errore su strcmp(stringa,"0") ma a livello di sintassi non dovrebbe essere sbagliato perche la variabile stringa contiene il valore 0 e quindi dovrebbe fare il controllo...ma non me lo fa Ultima modifica di teppista83 : 28-08-2007 alle 21:38. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
cionci chiedo venia per l'errore non lo sapevo
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Quote:
|
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Nov 2006
Messaggi: 71
|
Curioso. A me compila e funziona alla perfezione.
Il valore di stringa viene stabilito a priori da te in fase di programmazione o è inserito in runtime? Ultima modifica di Doriän : 28-08-2007 alle 21:58. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
il valore di stringa e' una stringa costruita da me perche dovendo fare una ricerca utilizzo una grep e fin qui ci siamo perche la ricerca la fa. alla fine del grep il risultato di stringa e' 0 se ha trovato cio' che cercavo ma quando vado a comparare il valore stringa(che poi è 0) con la stringa "0" non mi esce nulla nel senso che poiche a seconda del valore della comparazione dovrebbe stampare o
"ho trovato" oppure "non ho trovato" non mi esce nessuna stampa a video. e non capisco perche |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora l'errore è altrove
![]() Hai provato a seguire l'esecuzione con un debbugger ? Dimmi eventuale ambiente di sviluppo, compilatore e sistema operativo. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
utilizzo la shell dell'universita' e uso putty come ambiente di lavoro che gira su win xp
adesso pero' mi sta vendendo un altro problema: se scrivo fdm=open("morte",O_RDONLY); read(fdm,nonesiste,1); il file morte contiene solo uno 0 perche' dopo aver fatto la read se faccio stampare il valore di nonesiste mi stampa 01? |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2005
Città: Napoli
Messaggi: 6817
|
Non sono sicuro che tutti i compilatori accettino costanti stringa come parametri di una funzione...
Hai provato a dicharare lo "0" che passi a strcmp come char *zero="0"; e poi scrivere if((strcmp(stringa,zero)==0) ... ?
__________________
0 A.D. React OS La vita è troppo bella per rovinarsela per i piccoli problemi quotidiani... IL MIO PROFILO SOUNDCLOUD! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
|
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
Codice:
#include<fcntl.h> #include <stdio.h> // per printf e scanf #include <string.h> // per strcat #include <sys/types.h> #include <stdlib.h> int main(void) { int flag; char nome[15],path[20]; printf("Dammi il nome\n"); scanf("%s",&nome); printf("Dove devo cercare\n"); scanf("%s",&path); flag=ricerca(nome,path); } int ricerca (char *nome, char *path) { int fd,fdm,esiste; char buf[1],nonesiste[1]=""; char stringa[100]=""; strcat(stringa,"egrep -i ^"); strcat(stringa,nome); strcat(stringa,"$ "); strcat(stringa,path); strcat(stringa," | wc -w "); system(stringa); fd=open("trovato",O_RDONLY); read(fd,buf,1); fdm=open("morte",O_RDONLY); read(fdm,nonesiste,1); printf("il valore d;i buf %s il valore di inesistente %s \n",buf,nonesiste); esiste=strcmp(buf,nonesiste); printf("il valore di esiste %d \n",esiste); // if (esiste==0) printf("Non trovato\n"); // else printf("Trovato\n"); exit(0); } Ultima modifica di cionci : 30-08-2007 alle 08:57. |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perché lavori sulle stringhe quando ti basterebbe lavorare sui caratteri ?
Inoltre il codice è concettualmente sbagliato perché non tieni conto del carattere di fine stringa. In C non esistono stringhe di un solo elemento (a meno che non sia una stringa vuota). La stringa minima è formata da un carattere + il carattere di fine stringa. Quindi se vuoi lavorare con le stringhe dei fare questa impostazione: char buf[2],nonesiste[2]; nonesiste[1] = buf[1] = '\0'; /*carattere di fines stringa*/ In questo modo funziona perché leggi dal file il carattere 0 delle rispettive stringhe. Comunque come ti dicevo sopra non ti servono le stringhe. Basta leggere un char singolo e poi confrontarlo. |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jul 2007
Città: Molfetta
Messaggi: 1172
|
ma io la stringa "stringa" la devo usare per forza per crearmi il comando di grep da mettere in system altrimenti non mi fa la ricerca...tu dici di non usare la stringa quando parlo di "buf" e "nonesiste"?
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:45.