开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 333

C++项目/libhv

forked from libhv/libhv
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (6)
标签 (13)
master
dev
kcptun
tfb
check_unicode
annotate
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.2.6
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.1.1
v1.1.0
v1.0.0
master
分支 (6)
标签 (13)
master
dev
kcptun
tfb
check_unicode
annotate
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.2.6
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.1.1
v1.1.0
v1.0.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (6)
标签 (13)
master
dev
kcptun
tfb
check_unicode
annotate
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.2.6
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.1.1
v1.1.0
v1.0.0
libhv
/
cpputil
/
hstring.cpp
libhv
/
cpputil
/
hstring.cpp
hstring.cpp 5.78 KB
一键复制 编辑 原始数据 按行查看 历史
ithewei 提交于 2024年04月10日 19:26 +08:00 . support HttpServer::run(:port)
#include "hstring.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
namespace hv {
std::string empty_string;
std::map<std::string, std::string> empty_map;
std::string& toupper(std::string& str) {
// std::transform(str.begin(), str.end(), str.begin(), ::toupper);
char* p = (char*)str.c_str();
while (*p != '0円') {
if (*p >= 'a' && *p <= 'z') {
*p &= ~0x20;
}
++p;
}
return str;
}
std::string& tolower(std::string& str) {
// std::transform(str.begin(), str.end(), str.begin(), ::tolower);
char* p = (char*)str.c_str();
while (*p != '0円') {
if (*p >= 'A' && *p <= 'Z') {
*p |= 0x20;
}
++p;
}
return str;
}
std::string& reverse(std::string& str) {
// std::reverse(str.begin(), str.end());
char* b = (char*)str.c_str();
char* e = b + str.length() - 1;
char tmp;
while (e > b) {
tmp = *e;
*e = *b;
*b = tmp;
--e;
++b;
}
return str;
}
bool startswith(const std::string& str, const std::string& start) {
if (str.length() < start.length()) return false;
return str.compare(0, start.length(), start) == 0;
}
bool endswith(const std::string& str, const std::string& end) {
if (str.length() < end.length()) return false;
return str.compare(str.length() - end.length(), end.length(), end) == 0;
}
bool contains(const std::string& str, const std::string& sub) {
if (str.length() < sub.length()) return false;
return str.find(sub) != std::string::npos;
}
static inline int vscprintf(const char* fmt, va_list ap) {
return vsnprintf(NULL, 0, fmt, ap);
}
std::string asprintf(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
int len = vscprintf(fmt, ap);
va_end(ap);
std::string str;
str.reserve(len+1);
// must resize to set str.size
str.resize(len);
// must recall va_start on unix
va_start(ap, fmt);
vsnprintf((char*)str.data(), len+1, fmt, ap);
va_end(ap);
return str;
}
StringList split(const std::string& str, char delim) {
/*
std::stringstream ss;
ss << str;
string item;
StringList res;
while (std::getline(ss, item, delim)) {
res.push_back(item);
}
return res;
*/
const char* p = str.c_str();
const char* value = p;
StringList res;
while (*p != '0円') {
if (*p == delim) {
res.push_back(std::string(value, p-value));
value = p+1;
}
++p;
}
res.push_back(value);
return res;
}
hv::KeyValue splitKV(const std::string& str, char kv_kv, char k_v) {
enum {
s_key,
s_value,
} state = s_key;
const char* p = str.c_str();
const char* key = p;
const char* value = NULL;
int key_len = 0;
int value_len = 0;
hv::KeyValue kvs;
while (*p != '0円') {
if (*p == kv_kv) {
if (key_len && value_len) {
kvs[std::string(key, key_len)] = std::string(value, value_len);
key_len = value_len = 0;
}
state = s_key;
key = p+1;
}
else if (*p == k_v && state != s_value) {
state = s_value;
value = p+1;
}
else {
state == s_key ? ++key_len : ++value_len;
}
++p;
}
if (key_len && value_len) {
kvs[std::string(key, key_len)] = std::string(value, value_len);
}
return kvs;
}
std::string trim(const std::string& str, const char* chars) {
std::string::size_type pos1 = str.find_first_not_of(chars);
if (pos1 == std::string::npos) return "";
std::string::size_type pos2 = str.find_last_not_of(chars);
return str.substr(pos1, pos2-pos1+1);
}
std::string ltrim(const std::string& str, const char* chars) {
std::string::size_type pos = str.find_first_not_of(chars);
if (pos == std::string::npos) return "";
return str.substr(pos);
}
std::string rtrim(const std::string& str, const char* chars) {
std::string::size_type pos = str.find_last_not_of(chars);
return str.substr(0, pos+1);
}
std::string trim_pairs(const std::string& str, const char* pairs) {
const char* s = str.c_str();
const char* e = str.c_str() + str.size() - 1;
const char* p = pairs;
bool is_pair = false;
while (*p != '0円' && *(p+1) != '0円') {
if (*s == *p && *e == *(p+1)) {
is_pair = true;
break;
}
p += 2;
}
return is_pair ? str.substr(1, str.size()-2) : str;
}
std::string replace(const std::string& str, const std::string& find, const std::string& rep) {
std::string res(str);
std::string::size_type pos = res.find(find);
if (pos != std::string::npos) {
res.replace(pos, find.size(), rep);
}
return res;
}
std::string replaceAll(const std::string& str, const std::string& find, const std::string& rep) {
std::string::size_type pos = 0;
std::string::size_type a = find.size();
std::string::size_type b = rep.size();
std::string res(str);
while ((pos = res.find(find, pos)) != std::string::npos) {
res.replace(pos, a, rep);
pos += b;
}
return res;
}
void NetAddr::from_string(const std::string& ipport) {
auto pos = ipport.find_last_of(':');
if (pos != std::string::npos) {
ip = trim_pairs(ipport.substr(0, pos), "[]");
std::string strPort = ipport.substr(pos + 1);
port = atoi(strPort.c_str());
} else if (ipport.find('.') != std::string::npos) {
ip = ipport;
port = 0;
} else {
port = atoi(ipport.c_str());
}
}
std::string NetAddr::to_string() {
const char* fmt = "%s:%d";
if (ip.find(':') != std::string::npos) {
fmt = "[%s]:%d";
}
return hv::asprintf(fmt, ip.c_str(), port);
}
} // end namespace hv
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

🔥 比libevent/libuv/asio更易用的国产网络库,用来开发 TCP/UDP/SSL/HTTP/WebSocket/MQTT 客户端/服务端
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/cppprojects/libhv.git
git@gitee.com:cppprojects/libhv.git
cppprojects
libhv
libhv
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /