十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
C语言中字符串长度的函数是strlen(),一个字符的长度为1;
创新互联建站为企业级客户提高一站式互联网+设计服务,主要包括成都网站建设、成都网站设计、成都App制作、重庆小程序开发、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。
函数原型:
unsigned int strlen (char *s);
头文件:
#include string.h
参数说明:s为指定的字符串;
功能说明:strlen()用来计算指定的字符串s
的长度,不包括结束字符'\0';
返回值:返回字符串s
的字符数;
注意:strlen()
函数计算的是字符串的实际长度,遇到第一个'\0'结束。
示例:
#includestdio.h
#includestring.h
int main()
{
char str[] = "ab\nxyz";//\n为回车字符,占一个字节
printf("strlen(str)=%d\n", strlen(str));
return 0;
}
//输出结果:strlen(str)=6
在C中,printf函数的使用格式是:printf(“格式控制字符串”,输出表列)
其中“格式控制字符串”一般形式为:
[标志][输出最小宽度][.精度][长度]类型。
如LZ问题中"%1d",其中数值1,就是指的输出最小宽度。
而这个输出最小宽度,是用十进制整数来表示的。
若实际位数多于定义的宽度,则按实际位数输出,
若实际位数少于定义的宽度则补以空格或0。
所以当这个宽度为1时,因为此时a的值是5,只有1位,定义的宽度不大于实际宽度,所以按实际宽度输出。但是定义宽度为2时,超过了实际数据宽度,所以多输出的位补了空格。
另外,LZ所谓的字符宽应该是指输出的字符位数的宽度。
/*
下面的代码计算一段ASCII文本的宽度。
每个字符可以设置不同的长度。
退格符会删除前面一个字符,也可能导致删掉前面一个换行符,使下面一行接在前面一行后面,使宽度更大。
*/
#include
#include
#include
#include
#define
TAB_WIDTH
8
//假设制表符的宽度为8
#define
ENTER_WIDTH
//假设回车符的宽度为0
#define
ALARM_WIDTH
//假设警示符的宽度为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(bstr)
b--;
}
else
{
*b=*e;
b++;
}
}
*b=0;
for(b=str,ml=0,l=0;*b;b++)
{
if(*b=='\n')
{
ml=mll?ml:l;
l=0;
}
else
l+=cl[*(unsigned
char
const
*)b];
}
free(str);
ml=mll?ml:l;
return
ml;
}
int
main()
{
int
c;
for(c=1;c256;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;
}