init
This commit is contained in:
commit
9be606322d
26
ex00/Makefile
Normal file
26
ex00/Makefile
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
CXX := c++
|
||||||
|
CXXFLAGS := -std=c++98 -Wall -Wextra -Werror -g
|
||||||
|
SRCDIR := src
|
||||||
|
OBJDIR := obj
|
||||||
|
NAME := convert
|
||||||
|
|
||||||
|
SRCS := $(wildcard $(SRCDIR)/*.cpp)
|
||||||
|
OBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS))
|
||||||
|
|
||||||
|
all: $(NAME)
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
|
||||||
|
mkdir -p $(OBJDIR)
|
||||||
|
$(CXX) $(CXXFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(NAME): $(OBJS)
|
||||||
|
$(CXX) $(CXXFLAGS) $^ -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(OBJDIR)
|
||||||
|
|
||||||
|
fclean: clean
|
||||||
|
rm -fr $(NAME)
|
||||||
|
|
||||||
|
re: fclean
|
||||||
|
@make --no-print-directory all
|
BIN
ex00/convert
Executable file
BIN
ex00/convert
Executable file
Binary file not shown.
BIN
ex00/obj/ScalarConverter.o
Normal file
BIN
ex00/obj/ScalarConverter.o
Normal file
Binary file not shown.
BIN
ex00/obj/main.o
Normal file
BIN
ex00/obj/main.o
Normal file
Binary file not shown.
73
ex00/src/ScalarConverter.cpp
Normal file
73
ex00/src/ScalarConverter.cpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#include "ScalarConverter.hpp"
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
|
#include <cerrno>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <exception>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
ScalarConverter::ScalarConverter()
|
||||||
|
{}
|
||||||
|
|
||||||
|
ScalarConverter::ScalarConverter(const ScalarConverter& src)
|
||||||
|
{
|
||||||
|
(void) src;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScalarConverter::~ScalarConverter()
|
||||||
|
{}
|
||||||
|
|
||||||
|
ScalarConverter& ScalarConverter::operator=(const ScalarConverter& src)
|
||||||
|
{
|
||||||
|
if (this != &src)
|
||||||
|
*this = src;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
double get_value(const std::string& str)
|
||||||
|
{
|
||||||
|
char *pos;
|
||||||
|
double value = std::strtod(str.c_str(), &pos);
|
||||||
|
if (pos)
|
||||||
|
std::cout << pos << std::endl;
|
||||||
|
if (errno == ERANGE)
|
||||||
|
throw std::exception();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void convert2char(const double value)
|
||||||
|
{
|
||||||
|
std::cout << "char: ";
|
||||||
|
if (isprint(static_cast<char>(value)))
|
||||||
|
std::cout << static_cast<char>(value);
|
||||||
|
else
|
||||||
|
std::cout << "Non displayable";
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void convert2int(const double value)
|
||||||
|
{
|
||||||
|
std::cout << "int: ";
|
||||||
|
if (value > INT_MAX)
|
||||||
|
std::cout << "imposible";
|
||||||
|
else
|
||||||
|
std::cout << static_cast<int>(value);
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScalarConverter::convert(const std::string &str)
|
||||||
|
{
|
||||||
|
double value;
|
||||||
|
try {
|
||||||
|
value = get_value(str);
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
std::cout << "convert imposible" << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
convert2char(value);
|
||||||
|
convert2int(value);
|
||||||
|
}
|
20
ex00/src/ScalarConverter.hpp
Normal file
20
ex00/src/ScalarConverter.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#define CHAREX "'.{1}'"
|
||||||
|
#define INTEX "^[+\\-]*[0-9]+$"
|
||||||
|
#define FLOATEX "^([+\\-]*(([0-9]+(\\.[0-9]+)?)|inf|nan))f?$"
|
||||||
|
#define DOUBLEEX "^([+\\-]*(([0-9]+(\\.[0-9]+)?)|inf|nan))f?$"
|
||||||
|
|
||||||
|
class ScalarConverter
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
ScalarConverter();
|
||||||
|
ScalarConverter(const ScalarConverter& src);
|
||||||
|
~ScalarConverter();
|
||||||
|
ScalarConverter& operator=(const ScalarConverter& src);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void convert(const std::string& str);
|
||||||
|
};
|
14
ex00/src/main.cpp
Normal file
14
ex00/src/main.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include "ScalarConverter.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main(int ac, char **av) {
|
||||||
|
|
||||||
|
if (ac != 2) {
|
||||||
|
std::cerr << "Wrong amount of arguments."
|
||||||
|
" This program takes one argument: the literal to convert."
|
||||||
|
<< std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
ScalarConverter::convert(av[1]);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user