Jak rozdělit string obsahující \r\n jako separátor slov na stringy obsahující daná slova – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak rozdělit string obsahující \r\n jako separátor slov na stringy obsahující daná slova – C / C++ – Fórum – Programujte.comJak rozdělit string obsahující \r\n jako separátor slov na stringy obsahující daná slova – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
ProXicT0
Návštěvník
29. 11. 2014   #1
-
0
-

Zdravím!

Mám takový primitivní dotaz. Mám string obsahující např.: "slovo\r\nDruhéSlovo\r\nTřetíSlovo\r\n";
a chtěl bych ho rozdělit na 3 stringy: string1[0] = "slovo"; string1[1] = "DruhéSlovo"; string1[2] = "TřetíSlovo";
Pomocí std::vector<string> ukládám do pole stringů.
Zatím mám toto: 

regex rx("[^\\s]+\r\n");
		sregex_iterator FormatedFileList(text.begin(), text.end(), rx), rxend;

		while(FormatedFileList != rxend)
		{
			FileName.push_back(FormatedFileList->str().c_str());
			++FormatedFileList;
		}

Ale std::regex bohužel vymaže slova před mezerou, takže když mám string "jedno slovo\r\n", tak mi vyleze pouze "slovo".

Se std::regex pracuji prvně, tak ani nevím, jak pořádně funguje a hlavně bych se mu chtěl vyvarovat a udělat si to po svém, pokud ale nebude jiného zbytí a půjde použít std::regex bez toho, aniž by vynechával slova, spokojil bych se s tím.
Předem Vám děkuji za jakékoliv rady!

Nahlásit jako SPAM
IP: 77.240.98.–
Flowy0
Věrný člen
29. 11. 2014   #2
-
0
-

regularne vyrazy su uzitocna tema ... odporucam sa jej nevyhybat ... aktualne odchytavas vsetky znaky okrem medzery a retazec musi pokracovat na \r\n za ktorymi musi koncit

Nahlásit jako SPAM
IP: 95.103.190.–
https://github.com/Flowy
ProXicT0
Návštěvník
29. 11. 2014   #3
-
0
-

#2 Flowy
Jestli ti správně rozumím, musím ještě nějakým způsobem přidat do regex rx("[^\\s]+\r\n"); znak pro mezeru?

Nahlásit jako SPAM
IP: 77.240.98.–
Řešení
Radek Chalupa
~ Redaktor
+1
Super člen
30. 11. 2014   #4
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

A co takhle jednoduše použít funkci strtok a do pole oddělovačů zadat \r\n?   

Radek Chalupa
- individuální konzultace a školení programování (C/C++, C#, WinAPI, COM, ATL, ActiveX, NET Framework, MFC)
- vývoj software na zakázku
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ingiraxo+15
Grafoman
30. 11. 2014   #5
-
+1
-
Zajímavé

#1 ProXicT
a co tahle použít trochu modernější zápis než parsovat přes regex nebo C zápisem? 

string vstup = "\r\nnejaky\r\ndlouhy\r\ntext\r\n";
istringstream iss(vstup);
vector<string> triSlova { istream_iterator<string> {iss}, istream_iterator<string> {} };
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ProXicT0
Návštěvník
30. 11. 2014   #6
-
0
-

#5 ingiraxo
Toto mi myslím rozdělí stringy po mezerách a také \r\n, ale já je potřebuji rozdělit pouze po \r\n.

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
30. 11. 2014   #7
-
0
-

#4 Radek Chalupa
Dobrý den, 
tuto funkci jsem hledal, jestli vůbec existuje, ale jediné, co jsem našel byly odkazy na knihovny boost, děkuji moc!

Nahlásit jako SPAM
IP: 77.240.98.–
ingiraxo+15
Grafoman
30. 11. 2014   #8
-
+1
-
Zajímavé

#6 ProXicT
aha, tak v tom případě se obávám, že nejlepší volba bude přes strtok, pokud slova můžou obsahovat i mezery

čistý c++ a STL nemá moc řešení, jak parsovat přímo přes string nebo char*, takže jak psal Radek, tak použij strtok 

const char* delim = "\r\n";
char vstup[] = "\r\nnejaky\r\ndlouhy\r\nte xt\r\n";
char* str = strtok(vstup, delim);
vector<string> triSlova;

while (str) {
    triSlova.push_back(str);
    str = strtok(0, delim);
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ProXicT0
Návštěvník
30. 11. 2014   #9
-
0
-

#8 ingiraxo
Už to mám právě tak, podle toho, jak mi poradil Radek Chalupa, i tak díky :)
A omlouvám se, zapomněl jsem označit vlákno jako vyřešené.

Nahlásit jako SPAM
IP: 77.240.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý