2.2 C++ code

1. 计算含有汉字的字符串长度
/**********************************************************************
* 函数名称:    gbk_strlen
* 功能描述:  计算含有汉字的字符串长度,汉字作为一个字符处理
* 输入参数:  需要计算的字符串
* 输出参数:  
* 返 回 值:  字符串长度
* 其它说明:  
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 
***********************************************************************/
int gbk_strlen(const char* str)
{
    const char* p = str;        //p用于后面遍历
    while(*p)                    //若是结束符0,则结束循环
    {
        if(*p < 0 && (*(p+1)<0 || *(p+1) < 63))            //中文汉字情况
        {
            str++;                //str移动一位,p移动移动2位,因此长度加1
            p += 2;
        }
        else
        {
            p++;                //str不动,p移动一位,长度加1
        }
    }
    return p-str;                //返回地址之差
}
2. Gbk互相转换UTF8
/**********************************************************************
* 函数名称:    GbkToUtf8
* 功能描述:  Gbk转化为UTF8
* 输入参数:  需要转化的字符串(Gbk)
* 输出参数:  转化后的字符串(UTF-8)
* 返 回 值:  无
* 其它说明:  
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 
***********************************************************************/
string GbkToUtf8(const std::string &strGBK)
{
    string strOutUTF8 = "";
    WCHAR *str1;
    int n = MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,NULL,0);
    str1 = new WCHAR[n];
    MultiByteToWideChar(CP_ACP,0,strGBK.c_str(),-1,str1,n);
    n = WideCharToMultiByte(CP_UTF8,0,str1,-1,NULL,0,NULL,NULL);
    char *str2 = new char[n];
    WideCharToMultiByte(CP_UTF8,0,str1,-1,str2,n,NULL,NULL);
    strOutUTF8 = str2;
    delete[]str1;
    str1 = NULL;
    delete[]str2;
    str2 = NULL;
    return strOutUTF8;
}

/**********************************************************************
* 函数名称:    Utf8ToGbk
* 功能描述:  UTF8转化为Gbk
* 输入参数:  需要转化的字符串(utf8)
* 输出参数:  转化后的字符串(Gbk)
* 返 回 值:  无
* 其它说明:  
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 
***********************************************************************/
string Utf8ToGbk(const std::string & strUTF8)
{
        string strOutGBK = "";
        WCHAR *str1;
        int n = MultiByteToWideChar(CP_UTF8,0,strUTF8.c_str(),-1,NULL,0);
        str1 = new WCHAR[n];
        MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, str1, n);
        n = WideCharToMultiByte(CP_ACP, 0, str1, -1, NULL, 0, NULL, NULL);
        char *str2 = new char[n];
        WideCharToMultiByte(CP_ACP, 0, str1, -1, str2, n, NULL, NULL);
        strOutGBK = str2;
        delete[]str1;
        str1 = NULL;
        delete[]str2;
        str2 = NULL;
        return strOutGBK;
}
3. 判断字符串是否为纯数字
/**********************************************************************
* 函数名称:    IsDigit2
* 功能描述:  判断字符串是否为纯数字
* 输入参数:  需要判断的string
* 输出参数:  
* 返 回 值:  true:纯数字,false:非纯数字
* 其它说明:  
* 修改日期 版本号 修改人 修改内容
* -----------------------------------------------
* 
***********************************************************************/
bool COperator_Special::IsDigit2(string str)
{
    for(int i=0;i<str.size();i++)
    {
        if ((str.at(i)>'9') || (str.at(i)<'0') )
        {
            return false;
        }
    }
    return true;
}
4. 解析csv文件
/***
*        解析csv文件
*/
BOOL ParseCSVFile(string fileName)
{
    //文件名错误
    vector<string> fields; //声明一个字符串向量
    string field;
    SplitString(fileName.c_str,fields,".");
    if (fields.size() < 2 || fields[fields.size()-1] != "csv")
    {
        //"文件格式错误";
    }

    ifstream fin(fileName); //打开文件流操作
    string line; 
    int lineCount = 0;
    while (getline(fin, line))   //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
    {
        vector<string> fields; //声明一个字符串向量
        string field;
        SplitString(line,fields,",");
        if (fields.size() != 7)
        {
            continue;
        }
        string loginName = Trim(fields[0]); //用户登录名
        string userName = Trim(fields[1]); //用户名称
        string cardId = Trim(fields[2]); //身份证号
        string sex = Trim(fields[3]);    //性别
        string ustatus = Trim(fields[4]); //状态
        string invalidTime = TimeToDbTime(Trim(fields[5])); //到期时间
        string department = Trim(fields[6]); //所属部分信息
        if (lineCount == 0)
        {
            lineCount++;
            continue;
        }

        lineCount++;

        //具体处理方法。。。
    }

    return TRUE;
}

/***
*        按指定字符截取字符串
*/
void SplitString(const string& str, vector<string>& ret_, const string &sep)
{
    if (str.empty())
    {
        return ;
    }

    string tmp;
    string::size_type pos_begin = 0;//str.find_first_not_of(sep);
    string::size_type comma_pos = 0;

    while (pos_begin != string::npos)
    {
        comma_pos = str.find(sep, pos_begin);
        if (comma_pos != string::npos)
        {
            tmp = str.substr(pos_begin, comma_pos - pos_begin);
            pos_begin = comma_pos + sep.length();
        }
        else
        {
            tmp = str.substr(pos_begin);
            pos_begin = comma_pos;
        }

        ret_.push_back(tmp);
    }
}

/***
*        删除字符串中空格,制表符tab等无效字符
*/
string Trim(string& str)
{
    str.erase(0,str.find_first_not_of(" \t\r\n"));
    str.erase(str.find_last_not_of(" \t\r\n") + 1);
    return str;
}
5. 解析csv文件
//系统日志信息
typedef struct tagSysLogInfo
{
    int                userId;            //需删除
    char            operatorIp[40];    //需删除
    char            sid[50];
    SysLogType        logType;
    char            logContent[100];
    char            logCondition[4096];
}T_SysLogInfo;

//增加系统日志
AddLogInfo(userInfo,LOG_TYPE_ADD,"新增区域黑名单信息,黑名单名:%s",blackName.asCString());

/**
*     增加系统日志信息
*/
bool AddLogInfo(GyUserInfo& userInfo,SysLogType tType,const char* pcFormat,...)
{
    if (m_pLogManage == NULL)
    {
        return false;
    }

    T_SysLogInfo t_logInfo;
    memset(&t_logInfo,0,sizeof(T_SysLogInfo));
    t_logInfo.userId = userInfo.iUserId;
    t_logInfo.logType = tType;

    va_list arglist;
    va_start(arglist, pcFormat);
    vsnprintf(t_logInfo.logContent,sizeof(t_logInfo.logContent),pcFormat,arglist);
    va_end(arglist);

    if ( m_pLogManage->SendMessage(ADD_SYS_LOG_INFO,(WPARAM)&t_logInfo, (LPARAM)this) == MSG_OK)
    {
        return true;
    }

    return false;
}

打赏

微信支付 支付宝支付

License

本作品由Simonhttp://www.uusystem.com)创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示此声明以及原文链接。如您有任何疑问或者授权方面的协商,请邮件:postmaster@uusystem.com。

results matching ""

    No results matching ""