码迷,mamicode.com
首页 > 其他好文 > 详细

代码写的少,搞不清边界和起始

时间:2015-07-01 12:02:48      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

 1     for(p = fmt; *p; p++)
 2     {
 3         if(*p != %)
 4         {
 5             putchar(*p);
 6             continue;
 7         }
 8         i = 0;// 永远指向下一个字符,因为0时也没有字符,可能最终也是没有字符
 9         localfmt[i++]=%;                    // start local fmt
10         while( *(p+1) && !isalpha(*(p+1)) ) // p 只处理到当前字符 测试下一字符   ++p  测试 p+1  
11                                             // i 处理到下一字符 从0开始添加 使用 i++
12             localfmt[i++]=*(++p);            // collect chars
13         localfmt[i++]=*(p+1);                // format letter
14         localfmt[i]=\0;
15             
16         switch(*++p)                        // format letter
17         {
18 
19         }
20     }
技术分享
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>

void minprintf(char *fmt, ...)
{
    va_list ap;
    char *p, *sval;
    int ival,i;
    double dval;
    char localfmt[100];


    va_start(ap, fmt);
    for(p = fmt; *p; p++)
    {
        if(*p != %)
        {
            putchar(*p);
            continue;
        }
        i = 0;
        localfmt[i++]=%;
        while( *(p+1) && !isalpha(*(p+1)) )
            localfmt[i++]=*(++p);
        localfmt[i++]=*(p+1);
        localfmt[i]=\0;
            
        switch(*++p)
        {
            case d:
                ival = va_arg(ap,int);
                printf(localfmt,ival);
                break;
            case f:
                dval = va_arg(ap,double);
                printf(localfmt,dval);
                break;
            case s:
                for(sval = va_arg(ap,char *); *sval; sval++)
                    putchar(*sval);
                break;
            default:
                putchar(*p);
                break;
        }
    }
    va_end(ap);
}

int main()
{
    minprintf("% d",10);
    return 0;
}
完整代码

对于开始存数的使用 i++ 始终指向要写入的位置(已有字符的下一位置),因为可能什么都不写,最后处理到i这个空位置。

对于已有的测试使用下一个字符(p+1),然后先移指针在处理当前字符,++p。

代码写的少,搞不清边界和起始

标签:

原文地址:http://www.cnblogs.com/daijkstra/p/4612656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!