中易网

C语言,计算字符串所占的宽度

答案:3  悬赏:0  
解决时间 2021-02-27 17:44
如 "123"---占3
如 "123\n4567"---占4
如 "123\n4567\n12"---占4
如 "123\n4567\n12\nABCDEF"---占6
高手给个源代码?
最佳答案


#include
#include
#include
#include

#define TAB_WIDTH 8 //假设制表符的宽度为8
#define ENTER_WIDTH 0 //假设回车符的宽度为0
#define ALARM_WIDTH 0 //假设警示符的宽度为0

int cl[256];

size_t digMaxWidth(char const * str)
{
char * b;
char * e;
size_t ml;
size_t l;
if(str==NULL)
return 0;
l=strlen(str);
b=(char *)malloc(l+1);
memcpy(b,str,l+1);
e=b;
str=b;
for (;*e;e++)
{
if(*e=='\b')
{
if(b>str)
b--;
}
else
{
*b=*e;
b++;
}
}
*b=0;
for(b=str,ml=0,l=0;*b;b++)
{
if(*b=='\n')
{
ml=ml>l?ml:l;
l=0;
}
else
l+=cl[*(unsigned char const *)b];
}
free(str);
ml=ml>l?ml:l;
return ml;
}

int main()
{
int c;
for(c=1;c<256;c++)
cl[c]=1;
cl[0]=0;
cl['\t']=TAB_WIDTH;
cl['\r']=ENTER_WIDTH;
cl['\a']=ALARM_WIDTH;


printf("%d\n",digMaxWidth("123\n4567\n12\nABCDEF"));
printf("%d\n",digMaxWidth("123\b\b\b\b\b\b\n4560007\n12\n\bABCDEF"));
return 0;
}
全部回答
14
字符串长度的 等等吧
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
阳江市有个海陵区,是吧?
学美容去哪学好
三星LED大显示屏
话说,一名球员的速度巅峰期是多大年龄
急等:客车和火车分别在两条平行的轨道上行驶
老唐太阳能在什么地方啊,我要过去处理事情
快乐购百货地址在什么地方,想过去办事
洛奇亚是最强的神奇宝贝吗?
梦到屋子里蝎子从瓶子跑出很多好不好
陌生人短信知道我的名字
USB线 4芯线4条都绞一起跟4芯线中两条信号芯
西安有哪些带“龙”字的特产或地名?
刘雪涛的演出剧目
我的欢乐豆已经超过200W了,只能进200倍场的
香山美容.养生地址有知道的么?有点事想过去
推荐资讯
黄金身段名豪店怎么去啊,有知道地址的么
后深井子地址有知道的么?有点事想过去
73岁老人能做二次开胸手术吗?
厦门企业和企业家联合会在什么地方啊,我要过
……如何的两种英文说法
多喜便当在哪里啊,我有事要去这个地方
32乘括号大于309括号里最大能填几
世界淡水稀缺为什么不节流河水不让他流入大海
因为是word格式建立的客户档案表有上千户有什
2016年7月21日是农历吗
键盘QWER四个键不灵?
运山镇地址在什么地方,想过去办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?