如 "123"---占3
如 "123\n4567"---占4
如 "123\n4567\n12"---占4
如 "123\n4567\n12\nABCDEF"---占6
高手给个源代码?
C语言,计算字符串所占的宽度
答案:3 悬赏:0
解决时间 2021-02-27 17:44
- 提问者网友:生亦何欢
- 2021-02-26 18:41
最佳答案
- 二级知识专家网友:转身后的回眸
- 2021-02-26 20:13
#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;
}
全部回答
- 1楼网友:傲娇菇凉
- 2021-02-26 21:05
14
- 2楼网友:萝莉姐姐鹿小北
- 2021-02-26 20:56
字符串长度的
等等吧
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯