Archief - [prog][C++]type checking in een string

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ocùn

Legacy Member
is er een manier om te checken of een bepaald deel van een string een cijfer is of niet? bijvoorbeeld de string:
"item 100 dit is een beschrijving"

hoe kan ik checken dat die 100 wel degelijk een integer is?

S3cT0r

Legacy Member
Ge kunt loopen door de string en isdigit() (of een custom if met de ASCII waarden als dat niet tot uw beschikking staat) checken. Kdenk niet dat hier een standard functie van is, maar tlijkt niet zo moeilijk om zelf te maken, gewoon checken of er een cijfer in een string staat, isdigit moet maar één keer true returnen.

Tyfius

Legacy Member
Mja, standaard C++ daar gaat ge mono niet voor gebruiken. Kweet trouwens niet hoe het met de implementatie van de C++.NET onder mono zit. Focussen zich voornamelijk op de MS only stuff.

Ik weet ook niet of er een isNumeric() functie bestaan in een of andere (default) library, dermee. Maar sector geeft wel een goed idee van de oplossing.

ocùn

Legacy Member
heel erg bedankt! die oplossing van sector werkt perfect
merci :-)
Code:
bool is_number(std::string& s){
	bool res(true);
	unsigned int i;
	for(i=0; i < s.size(); i++){
		if(!isdigit(s[i])){ 
			res = false;
			break;
		}
	}
	return res;
}

KeaTs

Legacy Member
werkt gewoon

Code:
if (sscanf(string, "item %d", &result)==1)
{
    //goed ingelezen
};

niet ?

killgore

Legacy Member
ocùn zei:
heel erg bedankt! die oplossing van sector werkt perfect
merci :-)
Code:
bool is_number(std::string& s){
	bool res(true);
	unsigned int i;
	for(i=0; i < s.size(); i++){
		if(!isdigit(s[i])){ 
			res = false;
			break;
		}
	}
	return res;
}

size_t gebruiken om strings af te gaan, niet int.

keats, voor c++ strings zou het dan iets zijn als:

Code:
if (sscanf(string.c_str(), "item %d", &result)>=1)
{
    //goed ingelezen
}
(ook >=1 of u komt lichtelijk in de problemen :p)

KeaTs

Legacy Member
ja, k werk bijna nooit met std :: string s :)

waarom >= 1 btw? Return value van sscanf is toch het aantal succesvol ingelezen variabelen, dat kan toch nooit meer dan 1 zijn in dit geval?

killgore

Legacy Member
KeaTs zei:
ja, k werk bijna nooit met std :: string s :)

waarom >= 1 btw? Return value van sscanf is toch het aantal succesvol ingelezen variabelen, dat kan toch nooit meer dan 1 zijn in dit geval?
ik denk dat hij wou weten OF er een int in de string zat, niet expliciet die string waar er maar 1 is ;). vandaar de >=

CyBeRRaT

Legacy Member
KeaTs zei:
ja, k werk bijna nooit met std :: string s :)

waarom zoude dat niet doen? de standard library is een schitterende tool! zie weinig reden om in c++ een string op te slaan als een char* ....
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan