」 feat: should have finished ex00

This commit is contained in:
2025-04-09 10:33:31 +02:00
parent 2b51c0baca
commit df7ffd0aeb
10 changed files with 198 additions and 29 deletions

41
ex00/GetType.cpp Normal file
View File

@ -0,0 +1,41 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* GetType.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 09:05:44 by adjoly #+# #+# */
/* Updated: 2025/04/09 09:18:37 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#include "GetType.hpp"
#include <cctype>
#include <cstdlib>
bool _isNan(const std::string &str) {
if (str == "nan" || str == "nanf" || str == "-inf" || str == "-inff" ||
str == "+inf" || str == "+inff" || str == "inf" || str == "inff")
return true;
return false;
}
nbType GetType(const std::string &str) {
if (_isNan(str))
return NAN;
if (str.length() == 1 && !isdigit(str[0]))
return CHAR;
char *err;
(void)strtol(str.c_str(), &err, 10);
if (*err == 0)
return INT;
(void)strtod(str.c_str(), &err);
if (*err == 0)
return DOUBLE;
if (*err == 'f' && *(err + 1) == 0)
return FLOAT;
return NONE;
}

28
ex00/GetType.hpp Normal file
View File

@ -0,0 +1,28 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* GetType.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 09:04:39 by adjoly #+# #+# */
/* Updated: 2025/04/09 09:55:16 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#pragma once
#include <string>
enum nbType {
CHAR,
INT,
FLOAT,
DOUBLE,
NAN,
NONE
};
bool _isNan(const std::string &);
nbType GetType(const std::string &);

View File

@ -6,13 +6,13 @@
# By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ # # By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # # Created: 2024/10/25 16:09:27 by adjoly #+# #+# #
# Updated: 2025/03/30 15:14:32 by adjoly ### ########.fr # # Updated: 2025/04/09 10:23:51 by adjoly ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
SHELL = bash SHELL = bash
NAME = Form NAME = ScalarConverter
CC = c++ CC = c++

View File

@ -6,23 +6,54 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/08 14:30:07 by adjoly #+# #+# */ /* Created: 2025/04/08 14:30:07 by adjoly #+# #+# */
/* Updated: 2025/04/08 14:30:36 by adjoly ### ########.fr */ /* Updated: 2025/04/09 10:32:48 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#pragma once #pragma once
#include <cctype>
#include <iostream> #include <iostream>
#include <limits>
#include <sstream>
template <typename T> void _printFloat(T nb) { template <typename T> void _printFloat(T nb) {
std::cout << "float: " << static_cast<float>(nb) << "f" << std::endl; std::cout << "float: " << static_cast<float>(nb) << "f" << std::endl;
} }
template <typename T> void _printInt(T nb) { template <typename T> void _printInt(T nb) {
std::cout << "int: " << static_cast<int>(nb) << std::endl; std::cout << "int: ";
if (nb < std::numeric_limits<int>::min() ||
nb > std::numeric_limits<int>::max())
std::cout << "impossible" << std::endl;
else
std::cout << static_cast<int>(nb) << std::endl;
} }
template <typename T> void _printChar(T nb) { template <typename T> void _printChar(T nb) {
std::cout << "char: '" << static_cast<char>(nb) << "'" << std::endl; std::cout << "char: ";
if (nb < std::numeric_limits<char>::min() ||
nb > std::numeric_limits<char>::max())
std::cout << "impossible" << std::endl;
else if (!isprint(nb))
std::cout << "Non displayable" << std::endl;
else
std::cout << "'" << static_cast<char>(nb) << "'" << std::endl;
} }
template <typename T> void _printDouble(T nb) { template <typename T> void _printDouble(T nb) {
std::cout << "double: " << static_cast<double>(nb) << std::endl; std::cout << "double: " << static_cast<double>(nb) << std::endl;
} }
template <typename T> T _ConvertTo(const std::string &str) {
std::stringstream ss(str);
T ret;
ss >> ret;
return ret;
}
template <typename T> void _Convert(const std::string &str) {
T nb = _ConvertTo<T>(str);
_printChar(nb);
_printInt(nb);
_printFloat(nb);
_printDouble(nb);
}

BIN
ex00/ScalarConverter Executable file

Binary file not shown.

View File

@ -6,11 +6,14 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/03 19:59:17 by adjoly #+# #+# */ /* Created: 2025/04/03 19:59:17 by adjoly #+# #+# */
/* Updated: 2025/04/08 14:17:44 by adjoly ### ########.fr */ /* Updated: 2025/04/09 10:31:41 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ScalarConverter.hpp" #include "ScalarConverter.hpp"
#include "GetType.hpp"
#include "PrintNb.hpp"
#include "StrTo.hpp"
void _log(std::string emoji, std::string what, std::string who, void _log(std::string emoji, std::string what, std::string who,
std::string str) { std::string str) {
@ -40,8 +43,47 @@ ScalarConverter::~ScalarConverter(void) {
_log("", "ScalarConverter", "", "destructor called"); _log("", "ScalarConverter", "", "destructor called");
} }
ScalarConverter &ScalarConverter::operator=(const ScalarConverter &) { return *this; } ScalarConverter &ScalarConverter::operator=(const ScalarConverter &) {
return *this;
void ScalarConverter::convert(std::string &s) { }
void _ConvertNan(const std::string &str) {
std::string nb;
if (str[0] == 'n')
nb = "nan";
else if (str[0] == '-')
nb = "-inf";
else
nb = "+inf";
std::cout << "char: impossible" << std::endl;
std::cout << "int: impossible" << std::endl;
std::cout << "float: " << nb << "f" << std::endl;
std::cout << "double: " << nb << std::endl;
}
void ScalarConverter::convert(const std::string &s) {
nbType type = GetType(s);
switch (type) {
case CHAR:
_Convert<char>(s);
break;
case INT:
_Convert<int>(s);
break;
case FLOAT:
_Convert<float>(s);
break;
case DOUBLE:
_Convert<double>(s);
break;
case NAN:
_ConvertNan(s);
break;
case NONE:
std::cout << s << " does not convert to any type" << std::endl;
break;
};
} }

View File

@ -6,18 +6,17 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/03 19:38:39 by adjoly #+# #+# */ /* Created: 2025/04/03 19:38:39 by adjoly #+# #+# */
/* Updated: 2025/04/08 14:29:28 by adjoly ### ########.fr */ /* Updated: 2025/04/09 10:31:49 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#pragma once #pragma once
#include <iostream>
#include <string> #include <string>
class ScalarConverter { class ScalarConverter {
public: public:
static void convert(std::string &); static void convert(const std::string &);
private: private:
ScalarConverter(void); ScalarConverter(void);
@ -25,17 +24,4 @@ class ScalarConverter {
~ScalarConverter(void); ~ScalarConverter(void);
ScalarConverter &operator=(const ScalarConverter &); ScalarConverter &operator=(const ScalarConverter &);
template <typename T> void _printFloat(T nb) {
std::cout << "float: " << static_cast<float>(nb) << "f" << std::endl;
}
template <typename T> void _printInt(T nb) {
std::cout << "int: " << static_cast<int>(nb) << std::endl;
}
template <typename T> void _printChar(T nb) {
std::cout << "char: '" << static_cast<char>(nb) << "'" << std::endl;
}
template <typename T> void _printDouble(T nb) {
std::cout << "double: " << static_cast<double>(nb) << std::endl;
}
}; };

16
ex00/StrTo.cpp Normal file
View File

@ -0,0 +1,16 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* StrTo.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 09:59:23 by adjoly #+# #+# */
/* Updated: 2025/04/09 10:19:50 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#include "StrTo.hpp"
#include <cstdlib>
#include <sstream>

20
ex00/StrTo.hpp Normal file
View File

@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* StrTo.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 09:24:16 by adjoly #+# #+# */
/* Updated: 2025/04/09 10:19:50 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#pragma once
#include <string>
char _ToChar(const std::string &);
int _ToInt(const std::string &);
float _ToFloat(const std::string &);
double _ToDouble(const std::string &);

View File

@ -6,12 +6,17 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/03 19:38:09 by adjoly #+# #+# */ /* Created: 2025/04/03 19:38:09 by adjoly #+# #+# */
/* Updated: 2025/04/03 19:51:28 by adjoly ### ########.fr */ /* Updated: 2025/04/09 10:31:55 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ScalarConverter.hpp" #include "ScalarConverter.hpp"
#include <iostream>
int main(void) { int main(int ac, char **av) {
if (ac < 2) {
std::cout << "needs an input ! :D" << std::endl;
return 1;
}
ScalarConverter::convert(av[1]);
} }