c++ 標準庫中sting類 缺失了很多常用功能 ,比如編碼轉換, 文字分割, 空格去除,字元全域性替換,計算md5等功能
該類單檔案,方便使用,開袋即食
#pragma once
#include #include namespace str_util
int len =
widechartomultibyte(cp_utf8, 0, str.c_str(), -1, nullptr, 0, nullptr,
nullptr);
std::string buff;
buff.resize(len + 1, 0);
widechartomultibyte(cp_utf8, 0, str.c_str(), -1, &buff[0], len, nullptr,
nullptr);
return buff;
}inline std::string widetoansi(const std::wstring& str)
int len =
widechartomultibyte(cp_acp, 0, str.c_str(), -1, nullptr, 0, nullptr,
nullptr);
std::string buff;
buff.resize(len + 1, 0);
widechartomultibyte(cp_acp, 0, str.c_str(), -1, &buff[0], len, nullptr,
nullptr);
return buff;
}inline std::wstring utf8towide(const std::string& str)
int len =
multibytetowidechar(cp_utf8, 0, str.c_str(), -1, nullptr, 0);
std::wstring buff;
buff.resize(len + 1, 0);
multibytetowidechar(cp_utf8, 0, str.c_str(), -1, &buff[0], len);
return buff;
}inline std::wstring ansitowide(const std::string& str)
int len =
multibytetowidechar(cp_acp, 0, str.c_str(), -1, nullptr, 0);
std::wstring buff;
buff.resize(len + 1, 0);
multibytetowidechar(cp_acp, 0, str.c_str(), -1, &buff[0], len);
return buff;
}templateinline t toupper(const t & str)
templateinline t tolower(const t & str)
templateinline void tokenize(std::vector&tokens,const t &str, const t &delim)
size_t p0 = 0, p1 = t::npos;
while(p0 != t::npos)
p0 = str.find_first_not_of(delim, p1);
}} templateinline void replace( t& src,const t& old_str,const t& new_str )
src.replace(p, sz_old, new_str);
p += sz_new;
}} templateinline t& trimleft(t& str,const t& trim) else
return str;
} templateinline t& trimright(t& str,const t& trim) else
return str;
} templateinline t& trim(t& str, const t& trim)
inline std::string format(const char *fmt,...)
va_end(marker);
}return ret;
} inline std::wstring format(const wchar_t *fmt, ...)
va_end(marker);
}return ret;
} typedef unsigned int md5_u32plus;
typedef unsigned char byte;
typedef struct md5_ctx;
#define md5digestlen 16
#define proto_list(list) list
typedef void(winapi* pmd5init) proto_list((md5_ctx *));
typedef void(winapi* pmd5update) proto_list((md5_ctx *, const byte *, unsigned int));
typedef void(winapi* pmd5final)proto_list(( md5_ctx *));
inline std::string md5(const std::string& str) ;
static hmodule dll = nullptr;
static pmd5init md5init = nullptr;
static pmd5update md5update = nullptr;
static pmd5final md5final = nullptr;
if(!dll)
if(!md5init || !md5update ||!md5final)
byte ou***[17] = ;
md5init(&ctx);
int n = str.size() / 64;
for(int i= 0; i< n; ++i)
md5update(&ctx, (byte*)&str[n* 64], str.size()%64);
md5final(&ctx);
std::string md5;
char buf[3] = {};
for (int i = 0; i < 16; i++)
return md5;
}};#define _wf str_util::format
C 中標準庫std string的實現
以下實現了c 標準模板庫中std string中的部分實現,參考了cplusplus.關於c 中標準模板庫std string的介紹和用法可以參考 實現 string.hpp如下 ifndef fbc stl string hpp define fbc stl string hpp include ...
C 補充七 標準 I O庫
一次只能讀取乙個字元 void test01 兩個引數 可以讀字串 兩個引數 讀取字串時,不會把換行符拿走,遺留在緩衝區中 void test02 else cout buf endl 把換行符讀取,並且扔掉 void test03 else cin.ignore 忽略 void test04 ci...
C 標準庫和C 標準模版庫
c 標準庫很大,在現在的情況下,c 標準庫確實越來越好,因為大的庫會包含大量的功能.標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多,c 庫並非提供一切 很明顯的是沒有提供開發和圖形使用者介面的支援 但確實提供了很多.標準c 庫中主要有以下主要元件 標準c庫.i 0流技術.string.容...