明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2221|回复: 5

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

[复制链接]
发表于 2005-3-4 20:36 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 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;
}

评分

参与人数 1威望 +1 金钱 +1 收起 理由
easypower + 1 + 1 【好评】好程序

查看全部评分

发表于 2012-11-3 19:06 | 显示全部楼层
七年后顶你一下!
 楼主| 发表于 2012-11-17 21:47 | 显示全部楼层
七年后终于被顶,泪奔中。。。 。。。
发表于 2012-11-18 09:34 | 显示全部楼层
来的有点晚了,帮你顶一下
发表于 2012-11-26 09:46 | 显示全部楼层
我来晚了,对不住了。
发表于 2017-11-23 20:22 | 显示全部楼层
不错,都有可借鉴的地方
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号  
©2000-2017 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2018-7-23 14:02 , Processed in 0.374381 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表