/*
下面的代码计算一段ASCII文本的宽度。
每个字符可以设置不同的长度。
退格符会删除前面一个字符,也可能导致删掉前面一个换行符,使下面一行接在前面一行后面,使宽度更大。
*/
#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++) /*默认每隔字符宽度为1*/
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;
}
字符串长度的
等等吧
是不是计算这个字符串中最长一行的长度?