/* Conversione stringhe --> numeri interi. Scrivere una programma che legga una stringa (usare la classe "string") rappresentante una costante intera (eventualmente con segno '-'). Se la sequenza e' sintatticamente corretta memorizzare il corrispondente numero intero in una variabile di tipo `int' e visualizzarlo; altrimenti lanciare una opportuna eccezione. */ #include #include #include #include int main() try { int num = 0; bool negativo = false; int cont = 0; string str; cout << "Inserire un numero intero: "; cin >> str; for (unsigned int i = 0; i < str.size(); i++) { if (str[i] == '-') { if (negativo || i == str.size()-1) throw std::invalid_argument("Sintassi errata!"); else negativo = true; ++cont; } else if (str[i] >= '0' && str[i] <= '9') { num *= 10; // Sottraendo questa quantita' si arriva // al numero corrispondente (ASCII). num += str[i] - 48; ++cont; } else throw std::invalid_argument("Sintassi errata!"); } if (negativo) { // L'utente ha inserito soltanto `-'. if (cont == 1) throw std::invalid_argument("Sintassi errata!"); else num *= -1; } cout << "Il numero immesso e': " << num << endl; return 0; } catch (const std::exception& e) { cerr << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << endl; exit(1); }