Avatar billede snailwalker Nybegynder
03. juli 2005 - 16:57 Der er 16 kommentarer og
1 løsning

Kan ikke få search funktion til at virke

Se koden her: http://www.phpfi.com/68141

Jeg har en klasse som hedder MyString der indeholder en char* pChar og en int length. Jeg kan godt få search funktionen til at virke med kun en char, men så snart jeg har mere end en char virker den ikke. Hvad er der i vejen?
Avatar billede arne_v Ekspert
03. juli 2005 - 17:01 #1
har du overvejet at bruge strstr ?
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:02 #2
hæhæ det er en øvelsesopgave hvor man skal lave en klasse der minder om en string, så den går nok ikke :)
Avatar billede arne_v Ekspert
03. juli 2005 - 17:08 #3
jeg formoder at

if(*(pChar+j) != *(pTekst+j)) {

skal være

if(*(pChar+i) != *(pTekst+j)) {
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:10 #4
Den var faktisk oprindeligt
if(*(pChar+i+j) != *(pTekst+j)) { det andet er en trykfejl, men den udgave jeg lige har postet virker heller ikke
Avatar billede arne_v Ekspert
03. juli 2005 - 17:17 #5
inspiration:

int search(char *s, char *ss)
{
    for(int i = 0; i < strlen(s)-strlen(ss) + 1; i++)
    {
        for(int j = 0; j < strlen(ss); j++)
        {
            if(s[i+j] != ss[j])
            {
                goto skip;
            }   
        }
        return i;
    skip:;
    }
    return -1;   
}
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:23 #6
Det virker nu, det var da højst besynderligt :S

Kan du også give lidt inspiration til hvordan man gemmer en int i en zero terminated string, fx hvis man int i = 10 og gerne vil have at pChar indeholder "10"?
Avatar billede arne_v Ekspert
03. juli 2005 - 17:27 #7
hvis du må bruge indbyggede funktioner så se:
  http://www.eksperten.dk/artikler/143
Avatar billede arne_v Ekspert
03. juli 2005 - 17:28 #8
ellers se dette eksempel:

string xitoa(int v, char *digits)
{
  int radix = strlen(digits);
  string res = "";
  int tmp = v;
  while(tmp>0)
  {
      res = digits[tmp%radix] + res;
      tmp = tmp / radix;
  }
  return res;
}
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:28 #9
tror jeg ikke jeg må desvære :S
Avatar billede arne_v Ekspert
03. juli 2005 - 17:29 #10
det returnerer en STL string og ikke en char*

og så supporterer det alle radixer

men det viser teknikken
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:29 #11
Er der ikke nogen nem måde at gøre det på ?
Avatar billede arne_v Ekspert
03. juli 2005 - 17:33 #12
det der er den nemme måde !

:-)
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:36 #13
hæhæ :)

Smider du lige et svar, så må jeg jo selv rode videre med min constructor...
Avatar billede arne_v Ekspert
03. juli 2005 - 17:39 #14
svar
Avatar billede snailwalker Nybegynder
03. juli 2005 - 17:39 #15
Tak for hjælpen btw. :)
Avatar billede arne_v Ekspert
03. juli 2005 - 17:43 #16
jeg havde deb iøvrigt også som char*

static char buf[26];

char *qtoa(_int64 v)
{
  _int64 tmp;
  int ix,i;
  char c;
  if(v==0) {
      strcpy(buf,"0");
      return buf;
  }
  ix = 0;
  tmp = (v > 0) ? v : -v;
  while(tmp > 0) {
      buf[ix] = '0' + tmp % 10;
      ix++;
      tmp = tmp / 10;
  }
  if(v<0) {
      buf[ix]='-';
      ix++;
  }
  for(i=0;i<ix/2;i++) {
      c=buf[i];
      buf[i]=buf[ix-i-1];
      buf[ix-i-1]=c;
  }
  buf[ix]='\0';
  return buf;
}
Avatar billede segmose Nybegynder
06. juli 2005 - 16:24 #17
// enten er dette ufattelig smart eller forkert, tælle substring længden ned efter sammenligning ...
if(j == stringLength--)
  return i;
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