String zu long oder Integer Exception

UrsaMajor

Mitglied
Hallo zusammen,

ich möchte beim devc++ in der console eine zahl eingeben da aber nicht jeder so clever ist eine zahl einzugeben wollte ich erst das man auch strings eingeben kann. wenn das nun eine zahl ist soll sie umgewandelt werden. ist es aber ein zeichen dann soll eine exception kommen. wie kann ich das machen?
 
Hallo,
schaumal hier:

Code:
#include <iostream>
#include <sstream>

using namespace std;

class NumberFormatException{
        private:
                string error;
        public:
                NumberFormatException(const string& error){ this->error = error; }
                const string& toString(){ return error; }
};

template <typename T>class StringToNumberConverter{
        private:
                string number;
        public:
                StringToNumberConverter(const string number){
                        this->number = number;
                }

                T convert()  throw (NumberFormatException){
                        for(int i = 0; i < number.size(); i++){
                                if(number[i] < '0' || number[i] > '9')
                                        if(number[i] != '.') throw NumberFormatException("No valid input format");
                        }
                        istringstream is(number);
                        T result;
                        is >> result;
                        return result;
                }
};

int main(){
        string input;
        cout << "Please insert a number: " << endl;
        cin >> input;
        StringToNumberConverter<long> conv(input);
        try{ 
                
                cout << conv.convert() << endl;
        }catch(NumberFormatException& e){
                cout << "An error occured: ";
                cout << e.toString() << endl;
                return 1;
        }

}

//edit: Kannst du auch auf floats, doubles etc anwenden...

Gruß

RedWing
 
Zuletzt bearbeitet:
hi,

vielen dank. das habe ich gesucht. gibt es irgendwo eine erklärung für dieses teil. sieht ja doch auf den ersten blick logisch aus aber ich will mal genau wissen wie das alles funktioniert einige sachen sind noch unklar.

thx
 
Das was RedWing da gepostet hat gibts schon (von der Idee her), nennt sich boost::lexical_cast<>

Hier mal nen Beispiel das ich wirklich einfacher anzuwenden:

Code:
#include <iostream>
#include <string>
#include "boost/lexical_cast.hpp"

using namespace std;
using boost::lexical_cast;

int main()
{
	// Eingabe
	string in;
	getline(cin, in, '\n');
	// Umwandlung mit boost::lexical_cast
	try {
		double val = lexical_cast<double>(in);
		cout << "Value: " << val;
	} 
	catch(exception& err) {
		cout << "Error: " << err.what();
	}
}
 
Zuletzt bearbeitet:
Das was RedWing da gepostet hat gibts schon (von der Idee her), nennt sich boost::lexical_cast<>

Sollte mich vielleicht doch mal a weng mit boost auseinandersetzen :)

vielen dank. das habe ich gesucht. gibt es irgendwo eine erklärung für dieses teil. sieht ja doch auf den ersten blick logisch aus aber ich will mal genau wissen wie das alles funktioniert einige sachen sind noch unklar.

Was genau verstehst du denn nicht?

Gruß

RedWing
 
Zurück