Witam. Mam taki problem: mam np. taki tekst: "siemka|2345|cześć|koniec|cos" i teraz chcę pobrać z niego np. 3 część czyli w tym wypadku wyraz "cześć". Rozdzielaczem jest znak "|". W jaki sposób można to zrobić?
Jeżeli taki temat już gdzieś istnieje to przepraszam, ale szukałem już na tym i innych forach i nic nie znalazłem.
Mój kompilator to: microsoft visual c++ express 2008
Z góry bardzo dziękuję i czekam na pomoc :)
0
1
Jeśli nie zależy ci na ładnym kodzie:
/** text - tekst w którym szykamy fragmentu
ndx - numer fragmentu, INDEKSOWANY OD 1 (jeśli wolisz od 0, dodaj na początku funkcji ndx++ ;)
separator - znak dzielący
sample: puts(f("ala|ma|kota", 2, '|')); Output == "ma" */
char* f(char *text, int ndx, char separator)
{
char *prev = text;
char *curr = text;
while(1)
{
if (*curr == separator)
{
ndx--;
if (ndx == 0)
{
prev++;
int size = (int)(curr - prev);
char* result = (char*)malloc(size + 1);
int i;
for (i = 0; i < size; i++)
{ result[i] = prev[i]; }
result[size] = 0;
return result;
}
else prev = curr;
}
curr++;
}
}
Jeśli zależy, napisz własną funkcję split (nie słyszałem o takiej w bibliotece standardowej C++). W C# ten kod wyglądałby tak: tekst.Split('|')[1]
;
0
string slice(string str, int index, char separator) {
stringstream ss(str);
int size = str.length() + 1;
char buff[size];
int i = 0;
while(ss.getline(buff, size, separator)) {
++i;
if(i == index)
return string(buff);
}
return "";
}
0
ewentualnie boost::split
http://live.boost.org/doc/libs/1_41_0/doc/html/string_algo/usage.html#id1701774