liyisker 发表于 2017-1-15 21:58

【原创源码】 自己写的常用VC函数

头文件和函数声明:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 去除头尾的空白字符, 返回一个C风格字符串指针
// 注: 不创建新的buffer,不作内存拷贝和移动
// 如果长空为零,则返回NULL
char* AfTrim(char* src);

// 输入一个字符串, 存到output里(左右的空白字符会被自动去掉)
char* AfGetString(char* output);

// 获取一个整数, 如果输入为空则返回默认值defValue
int AfGetInt(int defValue);

// 获取一个小数, 如果输入为空则返回默认值defValue
double AfGetDouble(double defValue);

// 获取单字符输入, 如果输入为空则返回默认值defValue
char AfGetChar(char defValue);

// 获取bool型输入, 如果输入为空则返回默认值defValue
bool AfGetBool(bool defValue);

函数体:

// 去除头尾的空白字符, 返回一个C风格字符串指针
// 注: 不创建新的buffer,不作内存拷贝和移动
// 如果长空为零,则返回NULL
char* AfTrim(char* src)
{
        char* pStart = NULL;
        char* pEnd = NULL;
        char* p;
       
        // 从第1个字符开始扫描
        for(p=src ; *p != '\0'; p ++ )
        {
                if(*p == ' ' || *p == '\t' || *p== '\n')
                        ;       
                else
                {
                        pStart = p; // 开头
                        break;
                }
        }
        // 全部为空白字符
        if(pStart == NULL)
        {
                *src = '\0';
                return src ;
        }
        // 继续扫描
        bool nonBlank = true;
        for( ; ; p ++ )
        {
                if(*p == ' ' || *p == '\t' || *p== '\n' ||*p=='\0')
                {
                        if(nonBlank)
                        {
                                pEnd = p;
                                nonBlank = false;
                        }
                        if(*p == '\0') break;
                }
                else
                {
                        nonBlank = true;
                }
        }

        // 截断末尾的空白
        *pEnd = '\0';

        // 有效长度为0,返回空指针
        if(pEnd == pStart) return NULL;

        return pStart;
}

// 输入一个字符串, 返回接收到的长度
char* AfGetString(char* output)
{
        char buf;
        gets(buf);
        char* str = AfTrim(buf);
        if(str == NULL)
                return NULL;
        else
        {
                strcpy(output, str);
                return output;
        }
}

// 获取一个整数
int AfGetInt(int defValue)
{
        char buf;
        char* str = AfGetString(buf);
        if(str == NULL)
                return defValue;
        else
                return atoi(str);
}

// 获取一个小数
double AfGetDouble(double defValue)
{
        char buf;
        char* str = AfGetString(buf);
        if(str == NULL)
                return defValue;
        else
                return atof(str);
}

// 获取单字符输入
char AfGetChar(char defValue)
{
        char buf;
        char* str = AfGetString(buf);
        if(str == NULL)
                return defValue;
        else
                return str;
}

// 获取bool型输入
bool AfGetBool(bool defValue)
{
        char buf;
        char* str = AfGetString(buf);
        if(str == NULL)
                return defValue;
        else
        {
                if(strcmp(str, "YES") == 0
                        || strcmp(str, "yes") == 0
                        || strcmp(str, "1") == 0
                        || strcmp(str, "true") == 0
                        || strcmp(str, "TRUE") == 0)
                        return true;
                return false;
        }
}


使用试例:
struct User
{
        int id;
        char name;
        char phone;
        bool vip;
};

int main()
{
        User u;
        u.id = AfGetInt(0);
        AfGetString(u.name);
        AfGetString(u.phone);
        u.vip = AfGetBool(true);

        system("pause");
        return 0;
}

xouou 发表于 2017-1-15 22:26

好吧 支持一下,感觉纯纯的

killyouiii 发表于 2017-1-15 22:42

好吧 支持一下,感觉纯纯的

虚无空幻 发表于 2017-1-15 22:47

楼主新手,而且不会超过18岁.
建议楼主认为自己有能力了,不妨写个字符串的处理类实用些.
使用string来写,实现正则的一些功能.
基础点的,如csv识别,文本提取等等.然后再不停的优化.很练手

ttjwk 发表于 2017-1-16 08:54

有点少,多搞一点
页: [1]
查看完整版本: 【原创源码】 自己写的常用VC函数