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!
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; }
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.