一个桩号的类勇敢的贴出来,不要笑我。
本帖最后由 作者 于 2005-3-4 22:26:16 编辑 <br /><br /> 湖北天门市公路局。没事就爱搞得好玩。本人是业余的没什么水平,但就爱写程序玩这个类可以用到ARX中去。爱写程序的朋友请加我 QQ:9342546
E-mail:<A href="mailto:xbadnet@hotmail.com" target="_blank" >xbadnet@hotmail.com</A>
//zh.h头文件,定义类<BR>#include <windows.h><BR>#include <math.h><BR>#include <conio.h><BR>#include <iostream.h><BR>#include <string.h><BR>#include "Shlwapi.h"<BR>#include <stdlib.h><BR>#include <iomanip.h><BR>#include <stdio.h>
class xZh<BR>{<BR>public:<BR> xZh();<BR> double StringToZh(char* p);//字符串转成桩号数值<BR> char* ZhToString(double p,char* ret,bool all);//桩号数值转成字符串<BR> bool IsZh(char*); //这符串能不能转换成桩号数值。能的话,就初始化私有成员<BR> <BR>private:<BR> char qian; //桩号的千分位<BR> char ge; //桩号的个分位<BR> char xiaoshu;//桩号的小数位<BR>};<BR>
Cpp文件:
#include "桩号的类.h"<BR>//--------------------------------------------------------------------------------<BR>xZh::xZh()//构造函数<BR>{<BR> for(int i=0;i<3;i++)<BR> {qian='\0';ge='\0';xiaoshu='\0';}<BR>}
//--------------------------------------------------------------------------------<BR>double xZh::StringToZh(char* p)//字符串转换成桩号数值 作重点处理<BR>{<BR> int qw,gw,xsw;<BR> if(!IsZh(p))return -1; <BR> qw=atoi(qian);<BR> gw=atoi(ge);<BR> xsw=atoi(xiaoshu);<BR> return double(qw)*1000.0+double(gw)+double(xsw)/pow(10,strlen(xiaoshu));<BR>}
//--------------------------------------------------------------------------------<BR>bool xZh::IsZh(char* p)//判断一个字符串能不能转换成桩号。
{<BR> for(int x=0;x<3;x++)<BR> {qian='\0';ge='\0';xiaoshu='\0';}//构造清零
if(!(*p=='k' || *p=='K')) return false;<BR> int i=0;<BR> while(true)<BR> {<BR> if(*++p=='+')break;<BR> if(i>2)return false;//当桩号的千分位大于4位时退出最多能到K999+...<BR> if(*p<'0' || *p>'9'|| *p=='\0') return false;<BR> qian=(*p);<BR> }<BR> qian='\0';<BR>// cout<<"千分位="<<qian<<endl;
<BR> for(i=0;i<4;i++)<BR> { p++;<BR> if(*p=='.')break;<BR> if(*p=='\0')//如果遇到结束符<BR> {<BR> if(i==0)return false;//如果一开始就遇到结束符<BR> ge='\0';<BR> xiaoshu='\0';<BR>// cout<<"个分位="<<ge<<endl;<BR> return true;<BR> }<BR> if(*p<'0' || *p>'9') return false;<BR> ge=*p;<BR> }<BR> ge='\0';<BR>// cout<<"个分位="<<ge<<endl;
for(i=0;i<3;i++)<BR> {<BR> if(*++p=='\0')break;<BR> if(*p<'0' || *p>'9') return false;<BR> xiaoshu=*p;<BR> }<BR> xiaoshu='\0';<BR>// cout<<"小数位="<<xiaoshu<<endl;<BR> return true;<BR>}<BR>//--------------------------------------------------------------------------------<BR>char* xZh::ZhToString(double p,char* ret,bool all)//桩号数值转成字符串<BR>{<BR>// char* str="%0.3f";<BR>// char* st="%0d";<BR>// char* sTempx="K%s+%s.%s";<BR>// char* sTemp="K%s+%s";<BR> char buff;<BR> int i;//转换后的桩号串长
for(int x=0;x<3;x++)<BR> {qian='\0';ge='\0';xiaoshu='\0';}//构造清零
sprintf(buff,"%0.3f",p);<BR>// cout<<"buff="<<buff<<endl;<BR> i=lstrlen(buff);<BR>// cout<<"字符串长:"<<i<<endl;<BR> xiaoshu='\0';<BR> xiaoshu=buff;<BR> xiaoshu=buff;<BR> xiaoshu=buff;<BR>// cout<<"分离小数位:"<<xiaoshu<<endl;<BR> if(i>7)<BR> { <BR> int a=0;<BR> for(a=0;a<=i-8;a++)qian=buff;<BR> qian='\0';<BR>// cout<<"分离千分位:"<<qian<<endl;<BR> }<BR> <BR> int Temp=(int)p-atoi(qian)*1000;<BR> if(Temp>100) sprintf(ge,"%0d",Temp);<BR> if(Temp<100) sprintf(ge,"0%0d",Temp);<BR> if(Temp<10) sprintf(ge,"00%0d",Temp);
// cout<<"分离的个分位:"<<ge<<endl;
// sprintf(buff,sTemp,qian,ge);<BR>// cout<<buff;
if(qian=='\0')qian='0';<BR> if(ge=='\0')ge='0';
if(xiaoshu=='0' && xiaoshu=='0' && xiaoshu=='0' <BR> || xiaoshu=='\0')//要是不带小数位的话<BR> {<BR> if(all==true)sprintf(ret,"K%s+%s",qian,ge);<BR> if(all==false)sprintf(ret,"+%s",ge);<BR> return ret;<BR> }<BR> if(all==true)sprintf(ret,"K%s+%s.%s",qian,ge,xiaoshu);<BR> if(all==false)sprintf(ret,"+%s.%s",ge,xiaoshu);
return ret;<BR>} 七年后顶你一下! 七年后终于被顶,泪奔中。。。 。。。 来的有点晚了,帮你顶一下 我来晚了,对不住了。 不错,都有可借鉴的地方
页:
[1]