数据库Initcap函数实现

来源:互联网 发布:云杉网络招聘 编辑:程序博客网 时间:2024/06/03 22:51
#include "iostream"#include <ctype.h>#define UTF8_CHAR_LEN( first_byte ) ((( 0xE5000000 >> (( first_byte >> 3 ) & 0x1e )) & 3 ) + 1)void InitCap(char* buffer, char* src, int src_len) {    if (src_len == 0 || src == NULL || buffer == NULL) {        return;    }    char *end = src + (src_len)-1;    char *start = src;    int  len = 0;    bool is_upper = true;    while (start <= end) {        int utfLen = UTF8_CHAR_LEN((unsigned char)*start);        if (islower(*start)) {            buffer[len++] = (is_upper == true ? toupper(*start) : *start);            is_upper = false;        }        else if (isupper(*start)) {            buffer[len++] = (is_upper == false ? tolower(*start) : *start);            is_upper = false;        }        else if (isdigit(*start)) {            buffer[len++] = *start;            is_upper = false;        }        else {            memcpy(buffer + len, start, utfLen);            len += utfLen;            is_upper = true;        }        start += utfLen;    }}int main() {    char* buffer = new char[100];    memset(buffer, 0, 100);//    char* src = "wwaa^aa";//    char* result = "Wwaa^Aa";//    InitCap(buffer, src, strlen(src));//    if (memcmp(buffer, result, strlen(result) != 0)) {//        std::cout << "error" << std::endl;//    }//    char* src = "www 我 zzz";//    char* result = "Www 我 Zzz";//    std::cout << "1111111" << std::endl;//    InitCap(buffer, src, strlen(src));//    if (memcmp(buffer, result, strlen(result) != 0)) {//        std::cout << "error" << std::endl;//    }    char* src = "wwaa我aa";    char* result = "Wwaa我Aa";    InitCap(buffer, src, strlen(src));    if (memcmp(buffer, result, strlen(result) != 0)) {        std::cout << "error" << std::endl;    }    delete[]buffer;    return 0;}
0 0
原创粉丝点击