Avatar billede js_delphi Nybegynder
10. januar 2007 - 16:50 Der er 10 kommentarer og
1 løsning

Hvad svarer til Delphi's ExtractStrings i C++

Goddag,

hvordan adskiller man smartest denne string i C++ Builder 6:

hej;du;der

saa "hej" bliver skrevet til Edit1,
"du" bliver skrevet til Edit2,
"der" bliver skrevet til Edit3.

Pft!
Avatar billede arne_v Ekspert
10. januar 2007 - 17:25 #1
char* eller std::string
Avatar billede js_delphi Nybegynder
10. januar 2007 - 17:32 #2
Da jeg er temmelig grøn til C++ kunne jeg godt bruge et eksempel paa ovenstaaende opgave.
Avatar billede arne_v Ekspert
10. januar 2007 - 17:41 #3
hvis char* saa

  char *p = strtok(s, " ");
  // process p
  while((p=strtok(NULL," "))!=NULL) {
      // process p
  }
Avatar billede arne_v Ekspert
10. januar 2007 - 17:46 #4
det er anderledes med stl::string
Avatar billede js_delphi Nybegynder
10. januar 2007 - 19:07 #5
Jeg har lavet foelgende procedure i Delphi:

procedure TFrmCAM.Load;
var
  i: integer;
  SL1, SL2: TStringList;
begin
  Screen.Cursor := crHourGlass;

  SL1 := TStringList.Create;
  SL2 := TStringList.Create;
  SL1.Clear;
  SL1.LoadFromFile(ExtractFilepath(Application.Exename) + 'Data.csv');

  for i := 1 to SL1.Count-1 do
  begin
    SL2.Clear;
    ExtractStrings([';'],[],PChar(SL1[i]),SL2);
    if StrComp(PChar(SL2[0]),PChar(FrmCAM.ComboBox2.Text)) = 0 then
    begin
      edit1.text := SL2[1];
      edit2.text := SL2[2];
      edit3.text := SL2[3];
      break;
    end;
  end;

  SL1.Free;
  SL2.Free;

  Screen.Cursor := crDefault;
end;

Kan jeg lokke dig til at oversaette det til C++, da jeg bare skal videre med projektet...? Point kan forhoejes, hvis noedvendigt.
Avatar billede bertelbrander Novice
10. januar 2007 - 23:02 #6
#include <iostream>
#include <string>
#include <vector>
#include <iterator>

void ExtractStrings(const char aDelim, const std::string& aInp, std::vector<std::string>& aOut)
{
  std::string::size_type pos, beg = 0;

  while((pos = aInp.find(aDelim, beg)) != std::string::npos)
  {
      aOut.push_back(aInp.substr(beg, pos - beg));
      beg = pos + 1;
  }
  aOut.push_back(aInp.substr(beg));
}

int main()
{
  std::vector<std::string > List;
  std::string T = "hej;du;der";

  ExtractStrings(';', T, List);

  std::copy(List.begin(), List.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
Avatar billede bertelbrander Novice
10. januar 2007 - 23:10 #7
if StrComp(PChar(SL2[0]),PChar(FrmCAM.ComboBox2.Text)) = 0 then
Må være:
    if(SL2[0] == FrmCAM.ComboBox2.Text)
Avatar billede js_delphi Nybegynder
11. januar 2007 - 08:29 #8
Der ser spaendende ud.
Kan du kommentere koden, säledes at jeg ved, hvad jeg skal i gang med...
Jeg gär ud fra, at den er skrevet som konsol, hvilket jeg ikke bruger.

Et generelt spörgsmäl (til alle, som läser dette):
Til hvilke applikationer anvender man i dag konsol programmer?
Jeg synes aldrig, man stöder pä andet end ganske "normale" Windows
programmer i dagligdagen (vinduer med buttons, edits osv.), sä derfor ville det väre rart at höre, hvor konsol programmer i dag anvendes.
Avatar billede bertelbrander Novice
11. januar 2007 - 19:56 #9
Koden er ret simpel, ExtractStrings er en funktion der splitter en streng i dele, ved et adskille tegn, resultatet puttes i en vector af strenge.

std::string.find finder den første forekomst af et tegn i en streng, efter en position, den returnerer std::string::npos hvis der ikke er flere.

std::string.substr returnerer en del af strengen

std::vector<>.push_back tilføjer et element til vectoren.

Koden i main er kun et eksempel på brug af funktionen.

Konsol programmer bliver i dag næsten udelukkende brugt til programmer der ikke har nogen brugergrænseflade.
Avatar billede js_delphi Nybegynder
04. december 2007 - 15:56 #10
Tak for hjaelpen, laeg svar begge to.
Avatar billede arne_v Ekspert
04. december 2007 - 16:20 #11
ok
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