c 標準庫 std string 補充類

2021-09-24 20:30:47 字數 3314 閱讀 1395

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.容...