
Untitled
By: a guest on
Jun 17th, 2012 | syntax:
None | size: 1.68 KB | hits: 15 | expires: Never
#include <stdio.h>
#include <stdbool.h>
#include <limits.h>
int digits_in(int number)
{
int log10i = 0;
while (number /= 10)
++log10i;
return log10i + 1;
}
bool is_delim(int c)
{
return (c == ' ') || (c == '\t') || (c == '\n') || (c == ',');
}
bool is_digit(int c)
{
return (c >= '0') && (c <= '9');
}
int main(void) {
int c, in_word = false, digits_only = true;
int number = 0, tmp_number = 0, sign = +1, overflow = false;
while ((c = getchar()) != EOF)
{
if (is_delim(c))
{
if (in_word && digits_only)
{
if (!overflow) {
if (sign < 0)
{
printf("-");
}
printf("out: %0*d\n", digits_in(INT_MAX), number);
sign = +1;
}
}
number = 0;
digits_only = true;
overflow = false;
in_word = false;
}
else
{
if (is_digit(c) && digits_only)
{
tmp_number = number*10 + (c - '0');
if (tmp_number * number < 0) {
overflow = true;
}
number = tmp_number;
}
else if (!in_word && (c == '-'))
{
sign = -1;
}
else
{
digits_only = false;
sign = +1;
}
in_word = true;
}
}
return 0;
}