Re[3]: Как с помощью winapi перевести из строки в целое?
От: IT Россия linq2db.com
Дата: 26.03.02 23:50
Оценка:
Здравствуйте Kaa, Вы писали:

KMNT>>Может хватит и такой функции:


Kaa>Если ее оптимизировать по скорости и кол-ву вызовов раз в 100 — хватит. А так — точно нет. Одно могу сказать — ни одно собеседование с таких кодом не пройти.


Думаю, это шутка, причём похлеще чем у IV
А вообще можно объявить конкурс на самый тупой/медленный/через-одно-место алгоритм преобразования строки в число, причём дополнительные сложности типа знаковость можно даже и убрать, главное, чтобы он работал

Так круто как у KMiNT21 у меня конечно не вышло, но кое-что получилось

#include "stdafx.h"
#include <iostream>

int my_a_to_my_i(const char *s);

int my_strlen(const char *s)
{
    if (!s)
        return my_a_to_my_i("0");

    int len = my_a_to_my_i("0");
    while (*s != my_a_to_my_i("0")) {
        len += my_a_to_my_i("1");;
        s   += my_a_to_my_i("1");
    }

    return len;
}

int my_a_to_my_i(const char *s)
{
    if (!s)
        return my_a_to_my_i("0");

    if (s == "0")
        return s[0] - '0';

    if (s == "1")
        return *s - '0';

    if (!my_strlen(s))
        my_a_to_my_i("0");

    if (my_strlen(s) == 1)
        return  - '0' + *s;

    int  res = 0;
    char two[2] = "0";
    for (
            int i =  my_a_to_my_i("0");
                i <  my_strlen(s);
                i += my_a_to_my_i("1")
        ) 
    {
        *two  = s[i];
        res <<= my_a_to_my_i("1");
        res  *= my_a_to_my_i("5");
        res  += my_a_to_my_i(two);
    }

    return res;
}

void main()
{
    std::cout 
        << my_a_to_my_i("123456")
        << std::endl;
}
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.