解析9进制,11进制的字符串为10进制的数字输出
描述:     

解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,

前面的00不算做有效位。解析后以10进制的数字输出。
如果解析到非法字符串则返回-1 

9进制:
 9进制的数的范围:0,1,2,3,4,5,6,7,8
 9进制的开始为:0V或者0v
 9进制的正确实例:0V11 0v564 0V123 0v0784 0V0 0v 0V
 9进制的错误实例:0V923 0vt12 00V21 0123 
 9进制转换为10进制:0V11 -> 10
        0v564 -> 463
 
11进制:
 11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
 11进制的开始为:0W或者0w
 11进制的正确实例:0W11 0w564 0W123 0w0A8a 0W 0w
 11进制的错误实例:0WB923 0wVaA 00W21 0WAx123 
 11进制转换为10进制:
        0W11 -> 12
        0w564 -> 675

#include <iostream>  
#include<vector>  
#include <list>  
#include <map>  
#include <string>  
#include <algorithm>  
using namespace std;
int jinzhiConverter(string in)
{
	int sum = 0;
	int length = in.length();
	if (length<2)
	{
		return -1;
	}
	if ((in[1] != 'v' && in[1] != 'w'&&in[1] != 'V' && in[1] != 'W') || in[0] != '0')
	{
		return -1;
	}
	else
	{
		if (length == 2)
		{
			return 0;
		}
		if (in[1] == 'v' || in[1] == 'V')
		{

			for (int i = 2; i<length; i++)
			{
				if (in[i] <= '8'&&in[i] >= '0')
				{
					sum = sum * 9 + in[i] - '0';
				}
				else
				{
					return -1;
				}
			}
		}
		else
		{
			for (int i = 2; i<length; i++)
			{
				if ((in[i] <= '9'&&in[i] >= '0') || in[i] == 'A' || (in[i] == 'a'))
				{
					if (in[i] == 'A' || (in[i] == 'a'))
					{
						sum = sum * 11 +10;    //  sum=sum*11+'a'-'0';  ????ascii????
					}
					else{
						sum = sum * 11 + in[i] - '0';
					}
				}
				else
				{
					return -1;
				}
			}
		}
	}
	return sum;
}
int main()
{
		string in;
		cin >> in;
		cout << jinzhiConverter(in);
}