27. maj 2003 - 18:20
Der er
9 kommentarer og 1 løsning
Finder pattern i streng, og replace med anden tekst.
Hej, (så nærmer afleveringen sig! Klokken 12.00 i morgen) :o/ hvis jeg har en streng som denne: char streng[]="HEJ HER ER MORSEPER\r\nHvad så gamle dreng\r\n"; Så vil jeg have en funktion, som finder \r\n og replacer med <br> Kan det lade sig gøre på en smart måde?? Eller skal jeg kode mit eget ??
Annonceindlæg fra Publicis Sapient
>>Jakobdo. Kender ikke en smart måde men er ved at lære c++ og vil gerne have lidt erfaring, så vil gerne lave funktionen der kan for dig. (har selvfølgelig en ide om hvordan den skal se ud) :D
Dette kode! (modificeret Arne_V kode) :o) Klarer næsten opgaven... #include <stdio.h> #include <string.h> int main() { int len; char buffer[]="Hej\r\nMorsePer\r\nTest\r\nHvad så?\r\n"; char temp[100]; char result[20]; char *p1,*p2; p1 = buffer; memset(temp,'\0',100); while((p2=strstr(p1,"\r\n"))!=NULL) { len = p2-p1; strncpy(result,p1,len); result[len]='\0'; sprintf(result,"%s<br>",result); //printf("%s\n",result); strcat(temp,result); p1=p2+strlen("<->"); } printf(temp); return 0; } Jeg får dog følgende ud: Hej<br>orsePer<br>est<br>vad så?<br> Første bogstav mangler i hvert ord! (dog ikke HEJ)....
Fejlen er fundet og rettet.... p1=p2+strlen("<->"); Skal jo være: p1=p2+strlen("\r\n");
Der er ikke noget i ANSI C string.h men det er nemt at skrive noget. Jeg har selv brugt: #include <stdlib.h> #include <string.h> void replace(char *s,char *s1,char *s2) { int i,j; char *tmp; tmp = malloc(strlen(s)+1); strcpy(tmp,s); i = 0; j = 0; while(i<strlen(tmp)) { if(strncmp(tmp+i,s1,strlen(s1))==0) { strcpy(s+j,s2); i=i+strlen(s1); j=j+strlen(s2); } else { s[j]=tmp[i]; i++; j++; } } s[j] = '\0'; return; }
Er min "egen" funktion ikke lige så god?? Og når du bruger malloc, bør du så ikke bruge FREE()?
Arne_V: med din kode får jeg: Segmentation fault (core dumped) :o(
Arne_V, er jeg for dum til at bruge din funktion? Hvad er s? Hvad er s1? Hvad er s2? s = pattern... s1 = streng1 (som indeholder data, med \r\n s2 = streng2 (som kommer til at indeholde data, hvor \r\n er replaced med <br>)
Skulle bare lige tænke lidt... Din virker også fint Arne_V! (hvem havde dog også tvivlet) Jeg var bare for dum til at regne den ud!! Til andre: S = STRENG S1 = pattern som skal findes. S2 = pattern som erstatter S1
1) Jeg havde ikke set din kode da jeg postede (det tog lidt tid at finde den kode stump). 2) Jge formoder da at din kode virker lige så godt. 3) Ja - der mangler en free(tmp) til sidst. 4) Du har selv regnet argumenterne ud.
Kurser inden for grundlæggende programmering