Avatar billede mastrup Nybegynder
05. maj 2008 - 09:01 Der er 6 kommentarer og
1 løsning

String building

jeg sidder med et lille problem med formatering af min string jeg kan ikke få den til at separer rigtig den hopper ud efter en enkel gemmenkørelse og kan ikke lige gemmenskue hvad problemet er



    char InputBuffer[] = FirstName=testv1&LastName=testv2&submit=Submit;
    char * pToken;          // pointer to token separator
    char * pVariable;        // pointer to Variable separator       
    i=0;
    bool next = false;

    pToken = strtok(InputBuffer,"&");

    while (pToken != NULL) {    // While any tokens left in string
        cout << pToken << endl;
    cout << i << endl;
       
    pVariable = strtok(pToken,"=");

            while (pVariable != NULL){
           
            cout << pVariable << endl;

            pVariable=strtok(NULL,"=");
            }
   
    i++;
        pToken=strtok(NULL,"&"); // Find the next token
    }
Avatar billede pidgeot Nybegynder
05. maj 2008 - 10:09 #1
Jeg vil tro at dit problem er at den nederste strtok kører på din pToken, og ikke din InputBuffer (fordi du sidst har kaldt strtok med pToken, og det derfor er denne den checker når du sender NULL som parameter).

Du bliver nødt til at holde styr på hvor langt du er i InputBuffer, og så offsette pointeren tilsvarende når du forsøger at få fat på næste token - eller også skal du gribe det anderledes an, så du først får alle tokens fra InputBuffer ud i et array/collection/whatever, og så kører strtok igen på hver af dem.
Avatar billede bertelbrander Novice
05. maj 2008 - 19:23 #2
strtok kan ikke neste, dvs. du kan ikke bruge en strtok loop inden i en strtok loop.

Når du alligevel bruge C++ kan du lave:
#include <string>
#include <iostream>
using namespace std;

bool Split(string &aDest, string &aSrc, char aDelim)
{
  if(aSrc.empty())
      return false;
  string::size_type pos = aSrc.find(aDelim);
  aDest = aSrc.substr(0, pos);
  if(pos != string::npos)
    aSrc = aSrc.substr(pos + 1);
  else
    aSrc = "";

  return true;
}

int main()
{
  string InputBuffer = "FirstName=testv1&LastName=testv2&submit=Submit";
  std::string t1;

  while(Split(t1, InputBuffer, '&'))
  {    // While any tokens left in string
      string t2;
      while(Split(t2, t1, '='))
        cout << t2 << " ";
      cout << endl;
  }
}
Avatar billede arne_v Ekspert
05. maj 2008 - 20:05 #3
Man behøver ikke nested while løkke:

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

int main()
{

    char InputBuffer[] = "FirstName=testv1&LastName=testv2&submit=Submit";
    char *p;
    p = strtok(InputBuffer, "=");
    while(p != NULL)
    {
        printf("%s=", p);
        p = strtok(NULL, "&");
        printf("%s\n", p);
        p = strtok(NULL, "=");
    }
    return 0;
}
Avatar billede mastrup Nybegynder
10. maj 2008 - 22:08 #4
endnu en tak for hjælpen arne_v det er ikke første gang jeg bruger din løsning smider du ikke lige et svar
Avatar billede arne_v Ekspert
10. maj 2008 - 22:19 #5
svar
Avatar billede arne_v Ekspert
10. maj 2008 - 22:20 #6
Hvis du bruger C++, så er STL string noget sikrere at bruge.
Avatar billede arne_v Ekspert
30. august 2008 - 02:01 #7
så mangler du bare at acceptere svaret
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