diff --git a/flipword.c b/flipword/flipword.c similarity index 100% rename from flipword.c rename to flipword/flipword.c diff --git a/myscanf.c b/myscanf.c new file mode 100644 index 0000000..9327084 --- /dev/null +++ b/myscanf.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include + +char next_sign_char(); + +inline char next_sign_char() { + char c; + while (isspace(c = getchar())); + return c; +} + +int read_int(int* p) { + int i = 0; + bool pos = true; + + char c = next_sign_char(); + + if (c == '-' || c == '+') { + pos = c == '+'; + } else if (!isdigit(c)) { + return 0; + } else { + i = c - '0'; + } + + while ((c = getchar()) != EOF && c != '\n' && c != ' ') { + if (!isdigit(c)) return 0; + int digit = c - '0'; + if ((pos && i > (MAX_INT - digit) / 10) || + (!pos && i > (-1 * MIN_INT - digit) / 10)) { + break; + } + i *= 10; + i += c - '0'; + } + + *p = pos ? i : -i; + return 1; +} + + + +int main() { + int a; + read_int(&a); + printf("%d", a); +} diff --git a/revargs.c b/revargs.c new file mode 100644 index 0000000..28ee319 --- /dev/null +++ b/revargs.c @@ -0,0 +1,23 @@ +// vim: set ts=4 sw=4 et tw=80: + +#include +#include +#include + +bool compare_reverse(char* s1, char* s2) { + const size_t len = strlen(s1); + if (len != strlen(s2)) + return false; + for (size_t i = 0; i < len; i++) + if (s1[i] != s2[len - 1 - i]) + return false; + return true; +} + + +int main (const int argc, char** argv) { + for (int i = 1; i < argc - 1; i++) + for (int j = i + 1; j < argc; j++) + if (compare_reverse(argv[i], argv[j])) + printf("%s %s\n", argv[i], argv[j]); +}