1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
long long stringToLongLong(string myString, unsigned long long& index, unsigned short base)
{
long long beginningOfNumber = -1;
long long returnValue = 0;
if(base >= 2 || base <= 10)
{
while(index < myString.size() && (myString[index] < 48 || myString[index] > 48 + base - 1))
{
index++;
}
if(index < myString.size())
{
beginningOfNumber = index;
}
while(index < myString.size() && myString[index] >= 48 && myString[index] <= 48 + base - 1)
{
index++;
}
}
else if(base <= 16)
{
while(index < myString.size() && (myString[index] < 48 || myString[index] > 57) && (myString[index] < 65 || myString[index] > 65 + base - 11) && (myString[index] < 97 || myString[index] > 97 + base - 11))
{
index++;
}
if(index < myString.size())
{
beginningOfNumber = index;
}
while(index < myString.size() && (myString[index] >= 48 && myString[index] <= 57 || myString[index] >= 65 && myString[index] <= 65 + base - 11 || myString[index] >= 97 && myString[index] <= 97 + base - 11))
{
index++;
}
}
if(beginningOfNumber != -1)
{
for(unsigned long long lenght = index - beginningOfNumber; lenght > 0; lenght--)
{
if(myString[beginningOfNumber] == 48)
{
returnValue += 0*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 49)
{
returnValue += 1*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 50)
{
returnValue += 2*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 51)
{
returnValue += 3*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 52)
{
returnValue += 4*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 53)
{
returnValue += 5*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 54)
{
returnValue += 6*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 55)
{
returnValue += 7*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 56)
{
returnValue += 8*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 57)
{
returnValue += 9*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 65 || myString[beginningOfNumber] == 97)
{
returnValue += 10*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 66 || myString[beginningOfNumber] == 98)
{
returnValue += 11*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 67 || myString[beginningOfNumber] == 99)
{
returnValue += 12*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 68 || myString[beginningOfNumber] == 100)
{
returnValue += 13*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 69 || myString[beginningOfNumber] == 101)
{
returnValue += 14*pow(base, lenght-1);
}
else if(myString[beginningOfNumber] == 70 || myString[beginningOfNumber] == 102)
{
returnValue += 15*pow(base, lenght-1);
}
beginningOfNumber++;
}
}
return returnValue;
}
|