21. november 2003 - 11:06
Der er
9 kommentarer og 1 løsning
Isoler tal fra en tekststreng
Jeg er ved at skrive et program til ligings løsning og mangler en function til at isolere tal fra en streng af tekst som f.eks 43x+4, min ide ligner noget a al: while((TEST[i] > 48) && (TEST[i]<57)){ TEST[i] = TESTU[i]; i++;} Men det virker ikke som om det virker, findes der en fuction i nogle af standart lib'sene?
Annonceindlæg fra DE-CIX
21. november 2003 - 11:13
#1
Det kan godt laves med en for løkke som løber igennem strengen og smider det fundne over i f.eks. et array af structs med type, numval og varnavn. Men overvej at bruge en scanne generator som f.eks. lex/flex.
21. november 2003 - 11:27
#2
Links, please. Eller kode.
21. november 2003 - 11:33
#3
Du tester på TEST og flytter TESTU while((TESTU[i] > 48) && (TESTU[i]<57)) { // test forudsætter ACSII char. TEST[i] = TESTU[i]; // mener du det fra samme index til samme index? i ; } Du kunne måske se på strspn: char *TEST, *TESTU; // peger på passende værdier. strncpy(TEST, TESTU, strspn(TESTU, "0123456789"));
23. november 2003 - 01:21
#4
Prøv og se på dette eksempel: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define NONE 0 #define NUM 1 #define VAR 2 #define FLUSH buf[bufix] = '\0'; \ if(mode==NUM) printf("number = %d\n",atoi(buf)); \ if(mode==VAR) printf("variable = %s\n",buf); \ mode = NONE; \ bufix = 0; void parse(char *s) { int i; int mode; int bufix; char buf[10]; mode = NONE; bufix = 0; for(i=0;i<strlen(s);i++) { if(s[i]=='*') { FLUSH printf("operator *\n"); } else if(s[i]=='+') { FLUSH printf("operator +\n"); } else if(s[i]==' ') { FLUSH /* nothing */ } else if(isdigit(s[i])) { if(mode==NONE) mode=NUM; buf[bufix] = s[i]; bufix++; } else if(isalnum(s[i])) { if(mode==NUM) { FLUSH } if(mode==NONE) mode=VAR; buf[bufix] = s[i]; bufix++; } else { abort(); } } FLUSH } int main() { parse("43*x+4"); parse("43 * x + 4"); parse("43x+4"); parse("43 x + 4"); return 0; }
30. november 2003 - 22:52
#5
ferret> Kommet videre ?
01. december 2003 - 16:26
#6
Argh sorry, glemte helt dette spm, det må i undskylde. Og nej jeg må sige at jeg ikke helt forstår din kode, ville være rart med lidt dokumentation.
01. december 2003 - 16:34
#7
mode = hvad man er i gang med NUM = igang med et tal VAR = igang med et variabel navn NONE = igang med noget andet løkken løber strengen igennem og holder styr på mode og putter tegn i buf FLUSH er bare en lille macro til at gør enoget som skal gøres mange gange
01. december 2003 - 17:53
#8
Så hvordan kaldes den? giver man den bare en streng af tekst? Og hvordan kommer inputtet til at se ud?
01. december 2003 - 18:15
#9
Du kan jo se i min main metode hvordan parse kan kaldes. Den parse gør ikke noget med input udover at parse og outputte hvad den parser. I en virkelig applikation skal der naturligvis gøres noget med output.
01. december 2003 - 23:32
#10
Ok point til dig min gode mand.
Kurser inden for grundlæggende programmering