修改地方:输入一组坐标点求编码
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
//四舍五入取整函数
int interger(double x)
{
int y;
if(x<0)
y=int(x-0.5);
else if(x>=0)
y=int(x+0.5);
return y;
}
//无符号数编码
string encodeNumber(unsigned int sgn_num)
{
string result="";
//将该二进制值分为5位一组的块
while(sgn_num>=0x20)
{
int x;
x=sgn_num&0x1f;
//进行异或加上63
x=x|0x20;
x=x+63;
result+=char(x);
sgn_num>>=5;
}
result+=char(sgn_num+63);
return result;
}
//有符号值编码
string encodeSignedNumber(int num)
{
int sgn_num;
string result;
//变换二进制值,左移,地位补0
sgn_num=num<<1;
if(num<0)
{
sgn_num=~(sgn_num);//对负数求反
}
result=encodeNumber(sgn_num);
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
//有符号数,设置成double型,双精度浮点型,10位有效数字,float是单精度浮点型,只有6位有效数字
//一组数据
string cl="(38.5,-120.2),(40.7,-120.95),(43.252,-126.453)";
//string.size类型是size_type,不能与int比较,没找到其他方法,所以原字符串后加点东西做比较
string p=",a";
string p1="a";
string result;
cl+=p;
double lat,lng;
//设置个初始值
int lat_x=0,lng_x=0;
//设置差值
int lat_y,lng_y;
while(cl!=p1)
{
int w1=cl.find('(');
int w2=cl.find(',');
int w3=cl.find(')');
lat=atof(cl.substr(1,w2-w1-1).c_str());
lng=atof(cl.substr(w2+1,w3-1).c_str());
int x=interger(lat*100000);
int y=interger(lng*100000);
//计算差值
lat_y=x-lat_x;
lng_y=y-lng_x;
//用差值求arscII码
string latlat,lnglng;
latlat=encodeSignedNumber(lat_y);
result+=latlat;
lnglng=encodeSignedNumber(lng_y);
result+=lnglng;
//重设初值
lat_x=x;
lng_x=y;
cl=cl.substr(w3+2);
}
cout<<result<<endl;
//system函数是用来执行一条dos命令或运行一个外部程序。 pause是暂停,并等待用户按键
system("pause");
return 0;
}
结果为:_p~iF~ps|U_ulLnnqC_mqNvxq`@ 与google提供的例子结果一致