Avatar billede jakobdo Ekspert
17. maj 2003 - 16:29 Der er 14 kommentarer og
1 løsning

strstr (omvendt)

Hej,
hvis jeg bruger strstr(buffer,"<->"); på følgende streng:
char buffer[]="Hej.<-> Med.<-> Jer.<->";
så får jeg en pointer til "<-> Med.<-> Jer.<->"
Hvis jeg nu vil have "Hej.", hvad gør jeg så?
Jeg vil jo gerne have strengen, som starter i buffer[0] -> resultatet af strstr(bufffer,"<->");
Avatar billede gumbert Nybegynder
17. maj 2003 - 16:32 #1
Du vil altså have en funktion der retunerer tegnene før <-> som en tekststreng

er <-> et tegn du frit vælger eller fast?
Avatar billede jakobdo Ekspert
17. maj 2003 - 16:37 #2
Frit vælger!

Har lige leget lidt med ideen:

for (i=0;i<strlen(buffer);i++)
{
  if (buffer[i] == '<' && buffer[i+1] == '-' && buffer[i+2] == '>')
    printf("<-> fundet paa position: %d\n",i);
}
Ved ikke om det er godt nok, eller om der er en lettere måde...
Avatar billede gumbert Nybegynder
17. maj 2003 - 16:39 #3
skal <-> bestå af flere tegn?
Avatar billede gumbert Nybegynder
17. maj 2003 - 16:40 #4
og skal det foregå i c? (er bedre til c++)
Avatar billede arne_v Ekspert
17. maj 2003 - 16:41 #5
F.eks.:

int len;
char buffer[]="Hej.<-> Med.<-> Jer.<->";
char result[10];
len = strstr(buffer,"<->")-buffer;
strncpy(result,buffer,len);
result[len]='\0';
Avatar billede arne_v Ekspert
17. maj 2003 - 16:43 #6
#include <stdio.h>
#include <string.h>

int main()
{
  int len;
  char buffer[]="Hej.<-> Med.<-> Jer.<->";
  char result[10];
  len = strstr(buffer,"<->")-buffer;
  strncpy(result,buffer,len);
  result[len]='\0';
  printf("%s\n",result);
}

skriver "Hej." ud.
Avatar billede gumbert Nybegynder
17. maj 2003 - 16:45 #7
ik for noget men mangler du ikke return 0; ??????
Avatar billede jakobdo Ekspert
17. maj 2003 - 16:47 #8
HEHE, gode gamle Arne! :o)
Men når nu jeg har returneret HEJ., så skal jeg også have en streng med MED. og JER., altså tre strenge!!

Det kan også være der kun findes 1, altås det er variabelt...
Avatar billede gumbert Nybegynder
17. maj 2003 - 16:48 #9
brug pointere og defaultværdier
Avatar billede arne_v Ekspert
17. maj 2003 - 16:58 #10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  int len;
  char buffer[]="Hej.<-> Med.<-> Jer.<->";
  char result[10];
  char *p1,*p2;
  p1 = buffer;
  while((p2=strstr(p1,"<->"))!=NULL) {
    len = p2-p1;
    strncpy(result,p1,len);
    result[len]='\0';
    printf("%s\n",result);
    p1=p2+strlen("<->");
  }
  return 0;
}

skriver:

Hej.
Med.
Jer.
Avatar billede arne_v Ekspert
17. maj 2003 - 16:59 #11
gumbert>

Jo der manglede en return 0.
Avatar billede arne_v Ekspert
17. maj 2003 - 17:10 #12
Iøvrigt kan sådan noget pointer fræs nemt blive svært at overskue
og svært at lave korekt.

Det er min erfaring at ofte er det bedre med et andet approach.

Eksempel på samme funktionalitet implementeret på en anden måde:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  int i,state,ix;
  char buffer[]="Hej.<-> Med.<-> Jer.<->";
  char result[10];
  state=1;
  ix=0;
  for(i=0;i<strlen(buffer);i++) {
    switch(buffer[i]) {
        case '<':
          result[ix]='\0';
          if(strlen(result)>0) printf("%s\n",result);
          state=0;
          break;
        case '>':
          state=1;
          ix=0;
          break;
        default:
          if(state) {
              result[ix]=buffer[i];
              ix++;
          }
          break;
      }
  }
  return 0;
}
Avatar billede gumbert Nybegynder
17. maj 2003 - 17:14 #13
>arne
    ville han ikke have en funktion han kan kalde der så retunerer strengene?
Avatar billede arne_v Ekspert
17. maj 2003 - 17:21 #14
Jo.

Det her er jo kun et demo program der udskriver.

I en mere realistisk sammenhæng ville man jo nok skulle
have strengen ud.

Man kan returnere en af gangen, returnere et array af char arrays,
laver et callback etc.
Avatar billede gumbert Nybegynder
17. maj 2003 - 17:36 #15
ja ok.......
  men jeg ville nok stadig foretrække pointere eller reffarencer men det er jo en smagssag :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester