badboy518 发表于 2005-3-4 20:36:00

一个桩号的类勇敢的贴出来,不要笑我。

本帖最后由 作者 于 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 &lt;windows.h&gt;<BR>#include &lt;math.h&gt;<BR>#include &lt;conio.h&gt;<BR>#include &lt;iostream.h&gt;<BR>#include &lt;string.h&gt;<BR>#include "Shlwapi.h"<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;iomanip.h&gt;<BR>#include &lt;stdio.h&gt;


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&lt;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&lt;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&gt;2)return false;//当桩号的千分位大于4位时退出最多能到K999+...<BR>                if(*p&lt;'0' || *p&gt;'9'|| *p=='\0') return false;<BR>                qian=(*p);<BR>        }<BR>        qian='\0';<BR>//        cout&lt;&lt;"千分位="&lt;&lt;qian&lt;&lt;endl;


<BR>        for(i=0;i&lt;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&lt;&lt;"个分位="&lt;&lt;ge&lt;&lt;endl;<BR>                        return true;<BR>                }<BR>                if(*p&lt;'0' || *p&gt;'9') return false;<BR>                ge=*p;<BR>        }<BR>                ge='\0';<BR>//                cout&lt;&lt;"个分位="&lt;&lt;ge&lt;&lt;endl;


        for(i=0;i&lt;3;i++)<BR>        {<BR>                if(*++p=='\0')break;<BR>                if(*p&lt;'0' || *p&gt;'9') return false;<BR>                xiaoshu=*p;<BR>        }<BR>        xiaoshu='\0';<BR>//        cout&lt;&lt;"小数位="&lt;&lt;xiaoshu&lt;&lt;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&lt;3;x++)<BR>        {qian='\0';ge='\0';xiaoshu='\0';}//构造清零


        sprintf(buff,"%0.3f",p);<BR>//        cout&lt;&lt;"buff="&lt;&lt;buff&lt;&lt;endl;<BR>        i=lstrlen(buff);<BR>//        cout&lt;&lt;"字符串长:"&lt;&lt;i&lt;&lt;endl;<BR>        xiaoshu='\0';<BR>        xiaoshu=buff;<BR>        xiaoshu=buff;<BR>        xiaoshu=buff;<BR>//        cout&lt;&lt;"分离小数位:"&lt;&lt;xiaoshu&lt;&lt;endl;<BR>        if(i&gt;7)<BR>        {        <BR>                int a=0;<BR>                for(a=0;a&lt;=i-8;a++)qian=buff;<BR>                qian='\0';<BR>//                cout&lt;&lt;"分离千分位:"&lt;&lt;qian&lt;&lt;endl;<BR>        }<BR>        <BR>        int Temp=(int)p-atoi(qian)*1000;<BR>        if(Temp&gt;100) sprintf(ge,"%0d",Temp);<BR>        if(Temp&lt;100) sprintf(ge,"0%0d",Temp);<BR>        if(Temp&lt;10) sprintf(ge,"00%0d",Temp);


//        cout&lt;&lt;"分离的个分位:"&lt;&lt;ge&lt;&lt;endl;


//        sprintf(buff,sTemp,qian,ge);<BR>//        cout&lt;&lt;buff;


        if(qian=='\0')qian='0';<BR>        if(ge=='\0')ge='0';


        if(xiaoshu=='0' &amp;&amp; xiaoshu=='0' &amp;&amp; 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>}

风树 发表于 2012-11-3 19:06:46

七年后顶你一下!

badboy518 发表于 2012-11-17 21:47:31

七年后终于被顶,泪奔中。。。 。。。

chpmould 发表于 2012-11-18 09:34:47

来的有点晚了,帮你顶一下

flywind410 发表于 2012-11-26 09:46:21

我来晚了,对不住了。

xudongchu 发表于 2017-11-23 20:22:17

不错,都有可借鉴的地方
页: [1]
查看完整版本: 一个桩号的类勇敢的贴出来,不要笑我。