Archief - [PROG][C++] Integer of 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.

jodeman

Legacy Member
Heb hier het probleem dat ik een wiskundige notatie moet ingeven en nu moet ik kijken of de invoer een char is dus een wiskundig teken of wanneer de invoer een getal is.
Dit heb ik, ik zie het probleem wel, maar ik weet niet hoe ik het moet oplossen. Is er een functie in cin waarmee ik vorige invoer kan oproepen ofzo?

Code:
while (ok)
{
	if (cin >> test)
	{
                cout << "nummer ingevoerd";
	}
	else
	{
		if (cin >> expr)
		{
			switch (expr)
			{
				case '+' : s.action(expr); break;
				case '-' : s.action(expr); break;
				case '*' : s.action(expr); break;
				case '/' : s.action(expr); break;
				case '=' : ok = false; break;
				default  : test = expr; 
			}
		}
	}
}

Vich

Legacy Member
Volgens mij kan je best gewoon een hele lijn of string lezen(cin.getline() of cin >> String) en die vervolgens gaan analyseren(met strtol bijvoorbeeld).

Als je peek en/of putback zou gebruiken, dan kan je wel 1 karakter respectievelijk inlezen/terugsteken, maar zoiets heb je niet voor integers (en ik neem aan dat je eerst op integer wil checken, want een char als eerste input zou altijd een char teruggeven, ook al geef je een integer, dan krijg je gewoon het eerste karakter van dat ingevoerde getal).

[edit] Als je een meer uitgebreide String klasse wil dan diegene die met STL meegeleverd wordt, dan kan je eventueel m'n COW library gebruiken die te vinden is op http://opensource.lifeisdigital.net/
M'n String klasse heeft members als GetFirstWord, IgnoreFirstWord, Append, Trim, IsNumeric, Mirror, etc.

Ook zijn er TypeConverters die werken op deze manier:
Code:
if (!TypeConverter<int, String>::Convert(mijn_int, mijn_string)) ...
if (!TypeConverter<String, float>::Convert(mijn_int, mijn_string)) ...

[offtopic] (die library kan wel meer, zoals jouw klasse opslaan in XML om later terug in te laden, streaming, etc. later komt er documentatie online met code samples enzo. PM me maar als je interesse hebt) [/offtopic]

jodeman

Legacy Member
Merci voor het antwoord Vince, heb gekeken naar uw String klasse en daarmee kan ik wel verder denk ik. Wat ik echt nog mis (want had het al geprobeerd met string inlezen) is een StringTokenizer klasse zoals die in java besta.
Met XML werken in C++ ben ik nog niet aan toe :). Ben voor de moment nog bezig aan de basis te leren.

Vich

Legacy Member
jodeman zei:
Merci voor het antwoord Vince, heb gekeken naar uw String klasse en daarmee kan ik wel verder denk ik. Wat ik echt nog mis (want had het al geprobeerd met string inlezen) is een StringTokenizer klasse zoals die in java besta.
Met XML werken in C++ ben ik nog niet aan toe :). Ben voor de moment nog bezig aan de basis te leren.

Er is een String::Split, die doet hetzelfde ^^
(je kan een split char opgeven)

[edit] Als je de cow::String wil meegeven aan STL calls(cout bijvoorbeeld), dan kan je CharPtr() aanroepen om de char pointer mee te krijgen. (had je ws zelf al gevonden, maar ik vermeld het maar even)

[edit2]
- Met Log.h kan je dingen naar een HTML log wegschrijven
- Met CowUtils.h krijg je dingen als Message() (windows message box), Pause(milliseconds), RandomInt, RandomFloat, RandomBool,
- Met Assert.h krijg je een assert waarbij je de mogelijkheid krijgt om je programma te pauseren en te debuggen waar het fout gaat. Hij zet dan automatisch een breakpoint als je de assert niet negeert/overslaat bij een assert message box.

[edit3 - jaja, ben in een edit bui :P]
Maar de library is nog niet af(wel bijna), dus in de komende weken kunnen er nog heftige veranderingen in komen. Binnenkort schrijf ik uitgebreide documentatie en kleine voorbeeldprogrammaatjes over hoe je het kan gebruiken.

wlibaers

Legacy Member
In "The C++ Programming Language" (Stroustrup) wordt een dergelijk programma als voorbeeld gegeven.
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