|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Problema con stringhe
Ciao
![]() Devo scrivere un programma che prenda da un file di testo una serie di stringhe e mi stampi solamente quelle che terminano con "ed". Il codice che ho scritto è il seguente, mi sembra giusto però non stampa niente. ![]() Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCHAR 200 void numerostringhe2(char *s1, char *s2); int main(void){ char *s1=(char *)malloc((MAXCHAR+1)*sizeof(char)); char *s2=" "; int i=0; char c; while((c=getchar())!=EOF) s1[i++]=c; s1[i]='\0'; numerostringhe2(s1,s2); return 0; } void numerostringhe2(char *s1, char *s2){ int i=1; char *tmp; tmp=strtok(s1,s2); if(tmp[strlen(tmp)]=='d' && tmp[strlen(tmp)-1]=='e') printf("%s", *tmp); while((tmp=strtok(NULL,s2))!=NULL) if(tmp[strlen(tmp)]=='d' && tmp[strlen(tmp)-1]=='e') printf("%s", *tmp); } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
domanda scema è ... ma il file ando sta? non mi sembra proprio che te lavori sui file. Poi ti sei innamorato di strtok?
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Il file lo do in input io tramite la redirezione.
![]() Uso strtok in modo da isolare le varie sottostringhe e controllarle separatamente. Altrimenti come posso fare? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
allora tra che si potrebbe verificare un bufferoverflow come ridere ... a parte questo insignificante problema ... puoi anche usare un for.
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Scusa ma così non mi aiuti molto. Il for al posto di cosa? In qualunque caso uso strtok per prendere le sottostringhe
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ciao, ti riscrivo (corretto) il ciclo nella funzione numerostringhe2():
Codice:
tmp = strtok (s1, s2); while (tmp != NULL) { if (tmp[strlen(tmp)-2]=='e' && tmp[strlen(tmp)-1]=='d') printf ("%s", tmp); tmp = strtok (NULL, s2); }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 11-12-2005 alle 14:00. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ok grazie proverò
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Purtroppo ancora non stampa niente
![]() Ho creato un file di testo con scritto just married (quindi dovrebbe stampare married), però quando faccio partire il programma con questo testo in input non stampa niente. ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCHAR 200 void numerostringhe2(char *s1, char *s2); int main(void){ char *s1=(char *)malloc((MAXCHAR+1)*sizeof(char)); char *s2=" "; int i=0; char c; while((c=getchar())!=EOF) s1[i++]=c; s1[i]='\0'; numerostringhe2(s1,s2); return 0; } void numerostringhe2(char *s1, char *s2){ char *tmp; tmp=strtok(s1,s2); while(tmp!=NULL){ if((tmp[strlen(tmp)-1]=='d') && (tmp[strlen(tmp)-2]=='e')) printf("%s", *tmp); tmp=strtok(NULL,s2); } } ![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Codice:
if (strcmp((tmp + strlen(tmp) - 2), "ed") == 0) { printf ("%s", tmp); } ![]() (oppure quest'altra, che fa lo stesso lavoro: Codice:
if (strcmp(&tmp[strlen(tmp) - 2], "ed") == 0) { printf ("%s", tmp); }
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
L'errore è qui:
Codice:
printf("%s", *tmp); Codice:
printf("%s", tmp);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Infatti. Il codice funzionante:
Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCHAR 200 void numerostringhe2(char *, char *); int main(void) { char *s1 = (char *) malloc((MAXCHAR+1) * sizeof(char)); int i = 0; char c = '\0'; while ((c = getchar()) != EOF) { if (c != '\n') { s1[i++] = c; } else { s1[i++] = ' '; } } s1[i] = '\0'; numerostringhe2(s1, " "); return 0; } void numerostringhe2(char *s1, char *s2) { char *tmp; tmp = strtok(s1, s2); while (tmp) { if (strcmp(&tmp[strlen(tmp) - 2], "ed") == 0) { printf("%s\n", tmp); } tmp = strtok(NULL, s2); } }
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie ora infatti funziona
![]() In effetti sarebbe stato più semplice come aveva detto DanieleC88, ma non mi sono proprio ricordato di strcmp ![]() |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
numerostringhe2(s1, " \n");
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#18 | ||
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() Quote:
![]() ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:46.