WEB开发网
开发学院软件开发VC 编写一个STL中的CString类 阅读

编写一个STL中的CString类

 2010-01-23 20:32:29 来源:WEB开发网   
核心提示:然后最重要的就是计算这个buff有多大,如果大了就有内存浪费,编写一个STL中的CString类(2),小了完不成任务,所以要根据格式来动态计算,来计算精度,if (*p == '*'){nPrecision = va_arg(argList, int);p ++;}else{nPrecision =

然后最重要的就是计算这个buff有多大,如果大了就有内存浪费,小了完不成任务,所以要根据格式来动态计算,然后动态的开辟内存空间。就用一个循环来把格式串中的每一个字符读出来分别处理。先初始化一个长度变量nMaxLen =0;

for (const char * p = pstrFormat; *p != '';p++ )

如果读出来的不是'%'或是'%%'则长度加一。

if (*p != '%' || *(++p) == '%')
{
nMaxLen += 1;
continue;
}

如果前一个字符是'%',则读取格式,如果是'#'则长度加2,来为'0x'预留空间;如果是'*',则读紧跟着的一个整数,得到指定的宽度;其他的'+'、'-'、' '、'0'等字符主要是填充用,忽略长度。

for (; *p != ''; p ++)
{
if (*p == '#')
nMaxLen += 2; // 处理 '0x'
else if (*p == '*')
nWidth = va_arg(argList, int); //如:'%5f' 中的5
else if (*p == '-' || *p == '+' || *p == '0'|| *p == ' ')
; //忽略该符号
else // 不是标志字符就退出循环
break;
}

如果下一个字符是'.'则忽略去读取其后面一个字符,如果是'*'则也要读出其后的宽度,来计算精度。

if (*p == '*')
{
nPrecision = va_arg(argList, int);
p ++;
}
else
{
nPrecision = atoi(p);
for (; *p != '' && isdigit(*p); p ++)
;
}

接下来处理字符如果是'h'、'l'、'I'、'F'、'N'等,则忽略计算长度。

Tags:编写 一个 STL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接