- 积分
- 1722
- 明经币
- 个
- 注册时间
- 2005-1-12
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 作者 于 2005-3-4 22:26:16 编辑
湖北天门市公路局。没事就爱搞得好玩。本人是业余的没什么水平,但就爱写程序玩
这个类可以用到ARX中去。爱写程序的朋友请加我 QQ:9342546
E-mail:xbadnet@hotmail.com
//zh.h头文件,定义类 #include <windows.h> #include <math.h> #include <conio.h> #include <iostream.h> #include <string.h> #include "Shlwapi.h" #include <stdlib.h> #include <iomanip.h> #include <stdio.h>
class xZh { public: xZh(); double StringToZh(char* p);//字符串转成桩号数值 char* ZhToString(double p,char* ret,bool all);//桩号数值转成字符串 bool IsZh(char*); //这符串能不能转换成桩号数值。能的话,就初始化私有成员 private: char qian[4]; //桩号的千分位 char ge[4]; //桩号的个分位 char xiaoshu[4];//桩号的小数位 };
Cpp文件:
#include "桩号的类.h" //-------------------------------------------------------------------------------- xZh::xZh()//构造函数 { for(int i=0;i<3;i++) {qian='\0';ge='\0';xiaoshu='\0';} }
//-------------------------------------------------------------------------------- double xZh::StringToZh(char* p)//字符串转换成桩号数值 作重点处理 { int qw,gw,xsw; if(!IsZh(p))return -1; qw=atoi(qian); gw=atoi(ge); xsw=atoi(xiaoshu); return double(qw)*1000.0+double(gw)+double(xsw)/pow(10,strlen(xiaoshu)); }
//-------------------------------------------------------------------------------- bool xZh::IsZh(char* p)//判断一个字符串能不能转换成桩号。
{ for(int x=0;x<3;x++) {qian[x]='\0';ge[x]='\0';xiaoshu[x]='\0';}//构造清零
if(!(*p=='k' || *p=='K')) return false; int i=0; while(true) { if(*++p=='+')break; if(i>2)return false;//当桩号的千分位大于4位时退出最多能到K999+... if(*p<'0' || *p>'9'|| *p=='\0') return false; qian[i++]=(*p); } qian='\0'; // cout<<"千分位="<<qian<<endl;
for(i=0;i<4;i++) { p++; if(*p=='.')break; if(*p=='\0')//如果遇到结束符 { if(i==0)return false;//如果一开始就遇到结束符 ge='\0'; xiaoshu[0]='\0'; // cout<<"个分位="<<ge<<endl; return true; } if(*p<'0' || *p>'9') return false; ge=*p; } ge='\0'; // cout<<"个分位="<<ge<<endl;
for(i=0;i<3;i++) { if(*++p=='\0')break; if(*p<'0' || *p>'9') return false; xiaoshu=*p; } xiaoshu='\0'; // cout<<"小数位="<<xiaoshu<<endl; return true; } //-------------------------------------------------------------------------------- char* xZh::ZhToString(double p,char* ret,bool all)//桩号数值转成字符串 { // char* str="%0.3f"; // char* st="%0d"; // char* sTempx="K%s+%s.%s"; // char* sTemp="K%s+%s"; char buff[15]; int i;//转换后的桩号串长
for(int x=0;x<3;x++) {qian[x]='\0';ge[x]='\0';xiaoshu[x]='\0';}//构造清零
sprintf(buff,"%0.3f",p); // cout<<"buff="<<buff<<endl; i=lstrlen(buff); // cout<<"字符串长:"<<i<<endl; xiaoshu[3]='\0'; xiaoshu[2]=buff[i-1]; xiaoshu[1]=buff[i-2]; xiaoshu[0]=buff[i-3]; // cout<<"分离小数位:"<<xiaoshu<<endl; if(i>7) { int a=0; for(a=0;a<=i-8;a++)qian[a]=buff[a]; qian[a]='\0'; // cout<<"分离千分位:"<<qian<<endl; } int Temp=(int)p-atoi(qian)*1000; if(Temp>100) sprintf(ge,"%0d",Temp); if(Temp<100) sprintf(ge,"0%0d",Temp); if(Temp<10) sprintf(ge,"00%0d",Temp);
// cout<<"分离的个分位:"<<ge<<endl;
// sprintf(buff,sTemp,qian,ge); // cout<<buff;
if(qian[0]=='\0')qian[0]='0'; if(ge[0]=='\0')ge[0]='0';
if(xiaoshu[0]=='0' && xiaoshu[1]=='0' && xiaoshu[2]=='0' || xiaoshu[0]=='\0')//要是不带小数位的话 { if(all==true)sprintf(ret,"K%s+%s",qian,ge); if(all==false)sprintf(ret,"+%s",ge); return ret; } if(all==true)sprintf(ret,"K%s+%s.%s",qian,ge,xiaoshu); if(all==false)sprintf(ret,"+%s.%s",ge,xiaoshu);
return ret; } |
评分
-
查看全部评分
|