Avatar billede mutalisk Nybegynder
15. april 2008 - 01:24 Der er 3 kommentarer

Separering efter char

Jeg står og mangler en funktion som jeg på ingen måde kan se hvordan jeg skal lave. Men her er hvordan den virker:
gettok(STRING,N,CHAR)
Eksempel: gettok(hej med dig,2,32)
Resultat: med
32 = mellemrum, dvs. den "separere" med mellemrum, N = 2, dvs. den tager det der står som nummer 2 altså "med".

Et andet eksempel: gettok(7.1.2.6.5.7,4-5,46)
Resultat: 6.5
46 = punktum (.) N = 4-5, den skal altså tage nummer 4-5 seperaret efter punktum, og det bliver så "6.5".

Jeg vil tro dette er meget brugt inden for string manipulation, så jeg håber på der er nogle der har en function liggende som kan klare dette, og returnere den rigtige værdi.

Jeg værdsætte enhver hjælp, for jeg er virkelig på bar bund!
Avatar billede bertelbrander Praktikant
15. april 2008 - 01:59 #1
Det kunne være noget i stil med nedenstående.
Bemærk at vi i C++ tæller fra 0, så det "med" i "hej med dig" er ord nummer 1
Der er to numre til at angive førte og sidste ord, hvis du kun skal bruge et skal de to numre være det samme.

#include <string>
#include <iostream>

std::string gettok(const std::string& aInput, int aFirst, int aLast, char aSep)
{
  std::string s(aInput);
  std::string out;
  std::string::size_type pos;
  for(int i = 0; (pos = s.find(aSep)) != std::string::npos; i++)
  {
      if(pos > 0) // Ignore empty subparts...
      {
        if(i == aFirst)
        {
            out = s.substr(0, pos);
        }
        else if(i > aFirst)
        {
            out += aSep;
            out += s.substr(0, pos);
        }
        if(i == aLast)
            return out;
      }
      s = s.substr(pos + 1);
  }
  out += s;
  return out;
}

int main()
{
  std::string a = gettok("hej med dig", 1, 1, ' ');
  std::string b = gettok("7.1.2.6.5.7",3, 4, '.');
  std::cout << "First: " << a << std::endl;
  std::cout << "Second: " << b << std::endl;
}
Avatar billede mutalisk Nybegynder
15. april 2008 - 02:22 #2
Præcis hvad jeg ledte efter, mange tak.
Send et svar =)
Avatar billede bertelbrander Praktikant
15. april 2008 - 21:31 #3
Jeg samler ikke på point.
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