还是关于字符串

thomasCJ 2009-06-20 06:56:20
char *a = "1000Mbps";
char *b = "10bps";
char *c = "1000000Mbps";
...
有上面这些字符串,现在我想把他们转换成比较合适的字符串来显示
比如a用1Gbps显示,b还是用10bps显示,c用1Tbps显示
请教下怎么实现比较好,有劳各位,最好可以给点码。。
...全文
79 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thomasCJ 2009-06-22
  • 打赏
  • 举报
回复
5楼的方法可以,谢谢了
飞天御剑流 2009-06-20
  • 打赏
  • 举报
回复
char a[] = "1000Mbps";
char b[] = "10bps";
char c[] = "1000000Mbps";
if( !strncmp( a, "1000M", 5 ) ) a[1] = 'G', strncpy( a+2, a+5, 4 );
if( !strncmp( c, "1000000M", 8 ) ) a[1] = 'T', strncpy( a+2, a+8, 4 );
yangkunhenry 2009-06-20
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void change(const char *a,char *aa)
{
int ia;
ia=atoi(a);
int count=0;
while(ia/1000!=0)
{
ia/=1000;
count++;
}
switch(count)
{
case 0:
strcpy(aa,a);
break;
case 1:
itoa(ia,aa,10);
strcat(aa,"Gbps");
break;
case 2:
itoa(ia,aa,10);
strcat(aa,"Tbps");
break;
default:
break;
}
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *a = "1000Mbps";
char *b = "10bps";
char *c = "1000000Mbps";

int lena=strlen(a);
char *aa=(char*)malloc(sizeof(char)*lena+1);
memset(aa,0,lena+1);
change(a,aa);
printf("aa=%s\n",aa);

return 0;
}
tkminigame 2009-06-20
  • 打赏
  • 举报
回复
void convert(char* dst,char* src){
*dst++=*src++;//the first digit must be a non zero number
int zero = 0;
int digit = 0;
//count zero and digit length
while(true){
if('1'<=*src&&*src=<'9') {zero = 0;digit++;}
else if('0'==*src) {zero++;digit++;}
else if('k'==*src) {zero+=3;digit+=3;}
else if('M'==*src) {zero+=6;digit+=6;}
else if('G'==*src) {zero+=9;digit+=9;}
else if('T'==*src) {zero+=12;digit+=12;}
else if('\0'==*src||'b'==*src) break;
else{cout<<"exception:unknown format!"<<endl;return;}
src++;
}
//copy digits part
while(digit>0){
*dst++=*src++;
digit--;
}
digit=0;
char ch;
if(zero>=12) {ch = 'T';digit=zero-12;}
else if(zero>=9) {ch = 'G';digit=zero-9;}
else if(zero>=6) {ch = 'M';digit=zero-6;}
else if(zero>=3) {ch = 'K';digit=zero-3;}
else {ch = 'x';digit=zero; }

//copy the zeroes that cant be charged
while(digit>0){
*dst++='0';
digit--;
}
if(ch!='x'){
*dst++=ch;
}
*dst++='b';
*dst++='p';
*dst++='s';
*dst++='\0';
}


调用

char cha[255];

char *a = "1000Mbps";
char *b = "10bps";
char *c = "1000000Mbps";

convert(cha,a);
convert(cha,b);
convert(cha,c);
effective_person 2009-06-20
  • 打赏
  • 举报
回复
这是你存储数据的方式不对
换一种存储方式
lwh_1024 2009-06-20
  • 打赏
  • 举报
回复
没有现成的函数可以转换
还是自己写一个吧
码侬 2009-06-20
  • 打赏
  • 举报
回复
用 atoi得到前面的数据,
再分别除以 1000,1000000得到每一个数量级的数据,如果不为0就显示出来

69,382

社区成员

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

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