Jak usunąć ze stringa tabulatory?

0

Witam,

tak jak w temacie jak można usunąć tabulatory ze stringa.

Na początku myślałem że w tekście są spacje, więc zrobiłem takie coś:

void czyszczenie(string &a)
{
		char znak='>', znak2='<', znak3=' '; 
		size_t znaleziony; 

		while ( (znaleziony=a.find(znak, 0)) !=string::npos || (znaleziony=a.find(znak2, 0)) !=string::npos || (znaleziony=a.find(znak3, 0)) !=string::npos) 
		{ 
		a.replace (znaleziony, 1, 0, ' '); 
		} 
		
} 

ten kod usuwa mi także ">" i "<", ale mniejsza, nie wiem jak usunąć tabulatory.

Proszę o pomoc.

0

Tabulator to '\t'

0
a.erase(remove(a.begin(), a.end(), '\t'), a .end());
0

ok, działa.
Tylko okazuje się że mam jeszcze inne niepotrzebne białe znaki.

Można je jakoś za jednym razem usunąć?

Jeżeli nie to jak się dowiedzieć co to za znaki?

0
a.erase(remove_if(a.begin(), a.end(), isspace), a .end());
0

ok, pięknie. gdy

A możesz mi jeszcze napisać czy jest taka możliwość, aby biały znak był usuwany tylko wtedy gdy za nim znajduje się coś z wyjątkiem litery alfabetu?

0

Możliwość taka jest, ale nie w jednej linijce ;) Musisz samodzielnie napisać kod, który to robi.

0

wyrażenia regularne - regexp. "biały znak był usuwany tylko wtedy gdy za nim znajduje się coś z wyjątkiem litery alfabetu" -

  1. reg.Replace(text, "\s([a-zA-Z])", "\1") - zastąpi biały znak z następującym po nim drugim znakiem z zakresu a-z, A-Z drugim znakiem (czyli usunie znak pierwszy)
  2. albo reg.Replace(text, "\s(\w)", "\1") - zastąpi biały znak z następującym po nim znakiem drugim znakiem (będącym literą (wliczając w to natywne litery), cyfrą lub _) drugim znakiem (czyli usunie znak pierwszy)
  3. albo reg.Replace(text, "\s(?=\w)", "") - positive lookahead - zrobi dość dosłownie to, co potrzebujesz: usunie biały znak, jeśli następuje po nim znak z klasy \w (litera, cyfra, podkreślnik).
0

Ok, dzięki.

A może będziecie w stanie mi jeszcze pomóc z takim fantem.

Mam tekst:

Tottenham Hotspur
1</td></tr>
15-03-2008</td></tr>

i z tego tekstu chciałbym wyciągnąć:

Tottenham Hotspur
1
15-03-2008

czyli te informacje, które są zawarte między > a tym <

za pomocą regex, stworzyłem taki wzór wyrażenia:

".+>[<.+>]"

i daje on mi taki efekt:

Tottenham Hotspur
<
1<
15-03-2008<

da radę to jakoś udoskonalić, żeby było bez tych znaków > i <, oraz bez znaków białych?

mój kod:

#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <iostream>
#include <boost/foreach.hpp>
#include <fstream>
using namespace std;
using namespace boost;



int main()
{

string kod;

ifstream plik;

plik.open("dane.txt", ios::out);

if(plik.is_open())
{
	while(!plik.eof())
		{
		kod.push_back(plik.get());
		}
}
else cout << "dupa\n";

plik.close();
const static regex email_regex(
	
	
	"[.+>]([^>[:space:]<].*?)[<.+>]"
	
);

string tab[1000];
int a=0;



const sregex_token_iterator end;
for (sregex_token_iterator i(kod.begin(),
      kod.end(), email_regex);
      i != end;
      ++i)
   {
      std::cout << *i << std::endl;
	  tab[a]=*i;
	  a++;
   }

system("pause");
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1