КОД:
constexpr const int _wcslen(const wchar_t* test) {
int len = -1;
do {
len++;
} while (*test++ != L'\0');
return len;
}
constexpr const int getIntFromWchar_t(wchar_t chr) {
switch (chr)
{
case L'0':
return 0;
case L'1':
return 1;
case L'2':
return 2;
case L'3':
return 3;
case L'4':
return 4;
case L'5':
return 5;
case L'6':
return 6;
case L'7':
return 7;
case L'8':
return 8;
case L'9':
return 9;
default:
return 10;
}
}
constexpr const unsigned long long int pow(int a, int n) {
if (a != 0) {
unsigned long long int result = a;
for (int i = 0; i < n - 1; i++) {
result *= a;
}
return result;
}
else {
if (n == 0) {
return 1;
}
else {
return 0;
}
}
}
constexpr const unsigned long long int wtoi(const wchar_t* str) {
unsigned long long int result = 0;
for (int i = 0; i != _wcslen(str); i++) {
unsigned long long int p = pow(10, _wcslen(str) - i - 1);
if (p == 0) {
result += getIntFromWchar_t(str[i]);
}
else {
result += getIntFromWchar_t(str[i]) * p;
}
}
return result;
}
Всё было бы хорошо, если бы не
wtoi(L"35") // => 80
Собственно в этом и вопрос, почему так происходит, хотя по идее всё должно хорошо работать :)
Так же принимаются, всякого рода советы по улучшению конструкции кода :)