热心的各位大侠,求效率较高的算法!!

mycoolu 2003-08-30 11:57:51
一个掌机里的程序,用纯C语言开发,对itoa,malloc,free一些函数不认!按掌机的规约只有通过数组发送!


现已知 SendBuffer[0]='S'
SendBuffer[1-10]="BIAOHAO"//表号为十位,由用户输入的字符串,假设现表号为:"0000000009"
SendBuffer[11-12]="为变量LS"//由用户输入路数,高16位与低16位之分;
SendBuffer[13-15]="29F"///固定的标识码.
SendBuffer[16]= "变量 1--F"
通过循环LS得到如下数据(字符串):
S00000000090129F0
S00000000090229F1
S00000000090329F2
S00000000090429F3
S00000000090529F4
S00000000090629F5
S00000000090729F6
S00000000090829F7
S00000000090929F8
S00000000091029F9
S00000000091129FA
S00000000091229FB
S00000000091329FC
S00000000091429FD
S00000000091529FE
S00000000091629FF

用户的要求是:最好能以函数形式输出!


...全文
26 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Godisme 2003-08-31
  • 打赏
  • 举报
回复
// 我是李汉鹏,你的要求我不是很清楚,不知道这样能不能帮你解决问题

#include <stdio.h>

char SendBuffer[18]=
{
'S',
'0','0','0','0','0','0','0','0','0','9', // 表号
0,0, // 变量LS
'2','9','F',
'0',
'\0' // 结束字符
};

// 把数字(0-15)转换为十六进制字符
char NumToHexChar(int Num)
{
static strTable[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
if(Num<0 || Num>15)
return '\0';
return strTable[Num];
}

// 把数字(两位正整数)转换为字符串
bool NumToStr(int Num,char* pBuf)
{
if(Num<0|| Num>99)
return false;
pBuf[0]='0'+Num/10; // 十位
pBuf[1]='0'+Num%10; // 个位
return true;
}

void PrintLow()
{
for(int i=0;i<16;i++)
{
NumToStr(i+1,SendBuffer+11);
SendBuffer[16]=NumToHexChar(i);
printf("%s\n",SendBuffer);
}
}

void PrintHigh()
{
for(int i=16;i<32;i++)
{
NumToStr(i+1,SendBuffer+11);
SendBuffer[16]=NumToHexChar(i-16);
printf("%s\n",SendBuffer);
}
}

void main()
{
PrintLow();
printf("==================================================\n");
PrintHigh();
}
mycoolu 2003-08-30
  • 打赏
  • 举报
回复
谢谢,我试试!
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


白天有事没来csdn~
其实这个函数已经很接近你的要求了,我只能把组装字符串的函数写出来,具体发送函数我没法写~

// 定义就有固定内容的全局变量.
char g_szPrefix[] = { "S" },
g_szSuffix[] = { "2F9" };
// 定义全局变量用于保存用户输入的表号.
char g_szTableID[11];

char *AssembleStr(char *pPrefix, char *pTableID,
char *pSuffix, char *pOutput,
int nIndex)
{
int nTenth, nUnit, nMod;

// 保证下标的范围不出界(1 <= nIndex <= 32).
if(nIndex < 0 || nIndex > 32) return(pOutput);
// 计算生成序号所需的数字.
nUnit = nIndex % 10;
nTenth = nIndex / 10;
nMod = (nIndex > 16) ? nIndex - 16 : nIndex;

// 复制前缀.
while(*pPrefix) *pOutput++ = *pPrefix++;
// 复制表号.
while(*pTableID) *pOutput++ = *pTableID++;
// 生成序号1.
*pOutput++ = nTenth + '0';
*pOutput++ = nUnit + '0';
// 复制后缀.
while(*pSuffix) *pOutput++ = *pSuffix++;
// 生成序号2.
*pOutput++ = (nMod < 11) ? nMod - 1 + '0' : nMod - 11 + 'A';
// 添加终止符.
*pOutput = '\0';
// 返回结果字符串指针.
return(pOutput);
}

void SendData(int nStart, int nEnd)
{
int nIndex;
char SendBuffer[18];

for(nIndex = nStart; nIndex <= nEnd; nIndex ++)
{
// 调用组合字符串的函数,在此之前保证g_szTableID已经输入了正确内容.
AssembleStr(g_szPrefix, g_szTableID, g_szSuffix, SendBuffer, nIndex);
// 发送结果字符串SendBuffer.
// ...
}
}

这样行了吧?

niece 2003-08-30
  • 打赏
  • 举报
回复
关注 UP
cnxiaohai 2003-08-30
  • 打赏
  • 举报
回复
友情UP
mycoolu 2003-08-30
  • 打赏
  • 举报
回复
论坛上这么多的高手,难道怎么真就没人会了吗?
还是不屑回答这个问题呢???
郁闷ing........
mycoolu 2003-08-30
  • 打赏
  • 举报
回复
还漏了一点,以上结果是设高16位,通过对话框如果用户继续高低16位的话
数据是这样的!

S00000000091729F0
S00000000091829F1
S00000000091929F2
S00000000092029F3
S00000000092129F4
S00000000092229F5
S00000000092329F6
S00000000092429F7
S00000000092529F8
S00000000092629F9
S00000000092729FA
S00000000092829FB
S00000000092929FC
S00000000093029FD
S00000000093129FE
S00000000093229FF

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧