trim() w c++
Jak podaje wiki nie ma standardowej funkcji trimującej dla C/C++. Nie zastanawiałem się nad tym ponieważ zarówno w Builder C++ oraz C# takie funkcje są w standardzie. Jestem na tyle leniwy, że nie chciało mi się pisać czegoś od początku dlatego postanowiłem poszukać funkcji trim() napisanej w C/C++ w internecie. Ku mojemu zdziwieniu przyprawia to wiele problemów dlatego postanowiłem przyjrzeć się problemowi bliżej. Można oczywiście użyć darmowych bibliotek boost czy QT. Tylko po co do prościutkiego programu dodawać w/w biblioteki. W wielu miejscach spotkałem się z tym by używać funkcji remove() aczkolwiek usunie nam ona tylko spacje i tabulatory z prawej i lewej strony. Można się bawić w łączenie ciągów, przesuwanie wskaźników itp. Ku mojemu zdziwieniu rozwiązanie jest bardzo proste. Najlepiej użyć właśnie remove() z drobną modyfikacją. Poniżej przedstawiam moje gotowe rozwiązanie z komentarzem:
#include <string>
#include <iostream>
using namespace std;
string trim(string str)
{
int i=0;
/*
Wyznaczenie liczby znaków, które nie są spacją
lub tabulatorem.
*/
for(int x=0;str[x]!='';x++) if(str[x]!=' ' && str[x]!='\t') i++;
/*
Usunięcie spacji i tabulatorów z prawej i lewej strony.
*/
remove(str.begin(), str.end(), ' ');
remove(str.begin(), str.end(), '\t');
/*
Zwrócenie ciągu bez spacji i tabulatorów.
Gdybysmy tego nie zrobili to po użyciu funkcji
remove() otrzymamy wytrimowany ciąg uzupełniony
do jego pierwotnej długości o krzaczki.
*/
return str.substr(0, i);
}
int main()
{
cout << "trim2 : _" << trim("\t\t 123456\t\t : \t 7890 \t") << "_" << endl;
return 0;
}