Jak proskenovat řetězec const char* a vytáhnout z něj letopočty? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak proskenovat řetězec const char* a vytáhnout z něj letopočty? – C / C++ – Fórum – Programujte.comJak proskenovat řetězec const char* a vytáhnout z něj letopočty? – C / C++ – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Tux
~ Anonymní uživatel
4 příspěvky
1. 12. 2016   #1
-
0
-

Mám za úkol udělat funkci easterReport, která počítá datum Velikonoc a má následující rozhraní:

int easterReport ( const char * years, const char * outFileName )

Problém je, že mám načíst letopočty z const charu (příklady níže) a nevím, jakou funkcí proskenuju řetězec a vytáhnu z něj letopočty. Chtěl bych se zeptat, jak na to, abych mohl pokračovat dále. Zatím to chápu tak, že nějaká funkce bude hledat čtyři číslice po sobě a ty následně převede na proměnnou rok. Taky vůbec nevím, jak programu říct, že zde (2015-2020) má počítat všechny roky z intervalu.
 

"2012,2013,2015-2020"
"2001 , 2002  ,  2003 ,2005,2006"

Po vytáhnutí letopočtů mám v plánu pro ně spočítat datum Velikonoc a poté to hodit do html.

Dotaz anglicky - http://stackoverflow.com/…-of-a-string

Předem díky za odpověď.

Nahlásit jako SPAM
IP: 78.102.250.–
BDS+3
Věrný člen
2. 12. 2016   #2
-
0
-

#1 Tux
Nerad dělám za študáky úlohy, protože vidím jak to vypadá, když světu vládnou pitomci s diplomem. Ale tentokrát udělám z nudy výjimku.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> WordsExtract(const char delim, const string str);

int main()
{
	string input = "2012,2013,2015-2020, 2001 , 2002  ,  2003 ,2005,2006  - 2009";
	
	vector<string> inp = WordsExtract(',', input);

	
	for (unsigned u = 0; u < inp.size(); u++)
	{
		unsigned a = 0, b = 0;
		if (0 < sscanf(inp[u].c_str(), "%u-%u", &a, &b)) // base c
		{
			if (b == 0) b = a;

			for (; a <= b; a++)
			{
				cout << a << endl;//tady budeš počítat velikonoce
			}
		}
	}

	system("pause");
	return 0;
}

vector<string> WordsExtract(const char delim, const string str)
{
	vector<string> result;

	string word;
	for (string::const_iterator it = str.begin(); it != str.end(); it++) 	
	{
		if (*it == delim)
		{
			if (!word.empty())
			{
				result.push_back(word);
				word.clear();
			}
		}
		else
		{
			if (isdigit(*it) || (*it == '-' && !word.empty())) word += *it;
		}
	}
	if (!word.empty()) result.push_back(word);

	return result;
}

ber to jako inspiraci, ne jako řešení!

Nahlásit jako SPAM
IP: 185.69.69.–
Windows 10 x64 (i7 2,8GHz, RAM 16GB, GTX 560, 1920x1080, 27")
Visual Studio C#, RAD C/C++, Affinity P/D, Opera..
Rainbow Six 3, Tomb Raider, NFS, AOE, Dune 2..
gna
~ Anonymní uživatel
836 příspěvků
2. 12. 2016   #3
-
+1
-
Zajímavé
BDS +

   

char *p = (char*)years, *end;
while (*p)
{
	long start = strtol(p, &end, 0), konec = start;
	while (*end == ' ') ++end;
	if (*end == '-') {
		konec = strtol(end + 1, &end, 0);
		while (*end == ' ') ++end;
	}
	p = end + (*end == ',');
	printf("od %ld do %ld\n", start, konec);
}
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
836 příspěvků
2. 12. 2016   #4
-
0
-

bez ošetření neplatného vstupu. maličkost.

Nahlásit jako SPAM
IP: 213.211.51.–
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, 61 hostů

Podobná vlákna

Const char v C — založil Halancik

Definice const char *[] — založil Remder

Static const char array[] .. — založil kruciik

Moderátoři diskuze

 

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