stdstring 相关问题

std :: string是C ++标准库的基于字节的“字符串”类型,在<string>标头中定义。

snprintf 到预设大小的 std::string 不起作用?

我有点不明白为什么选项 1 不起作用。根据我的理解,只要我不超过字符串大小,我应该能够写入预设大小的 std::string ,但它不起作用

回答 1 投票 0

优化 C++ const std::string 文字声明以实现编译时初始化和运行时性能

我希望在庞大的 c++ 20 项目中优化 const 字符串文字的使用,以增强编译和运行时性能 在许多源文件中,字符串文字都是用 const std::str... 声明的。

回答 1 投票 0

如何定义泛化to_string和to_wstring以避免代码重复

我有许多用户定义的类,我想为其定义一个 to_string 函数。但是,我不想只为 std::string 定义它,而是为所有可能的情况定义它

回答 1 投票 0

如何构造一个嵌入 null 的 std::string ?

如果我想用如下行构造一个 std::string : std::string my_string("a b"); 当我想在结果字符串中包含三个字符(a、null、b)时,我只得到一个。 什么才是正确的

回答 12 投票 0

std::string 是否有空终止符?

下面的字符串会包含空终止符 ' ' 吗? std::string temp = "你好,怎么了";

回答 7 投票 0

将 `std::string` 临时值传递给 `std::string_view` 参数是否安全?

假设我有以下代码: void some_function(std::string_view 视图) { std::cout << view << '\n'; } int main() { some_function(std::string{"hello, world"}); /...

回答 4 投票 0

Program Database Toolkit(PDT) cxxparse/cxxparse4101 解析包含“#include<map>”和“std::to_string”的简单 C++ 文件时出错

我在使用 cxxparse/cxxparse4101 解析简单的 C++ 源文件时遇到错误。有人可以帮我吗? .c++ 文件: //地图.cpp #包括 #包括 #包括...

回答 1 投票 0

C++ const std:string& 传递给第三方 API 时的安全性

我有一个第三方 API,希望我通过引用传递 std::string 。它说它正在用 const 接受它。这几乎没有任何意义,因为它只能将内存指针转换为非

回答 3 投票 0

char* 与 std::string.data()

我正在使用 Azure IoT 中心向设备发送消息和从设备接收消息。为此,我使用了一个用 C 编写的库,而我的应用程序是用 C++ 编写的。当我将 std::string 转换为 ...

回答 1 投票 0

std::来自 const char* 的字符串,零分配

声明 std::string cpp{}; 时这会调用 new/malloc 吗? 假设我们已经有一个 const char* c。是否可以将内容从 c 移动到 cpp 而无需额外分配?

回答 1 投票 0

为什么从类内调用 std::string 时会损坏?

我有不懂的问题想咨询你。我有一个与此类似的代码: #include“StdAfx.h” #include“LocaleText.h” PyObject* GetLocaleText(PyObject* poSelf,

回答 1 投票 0

在 std::vector 中查找相似字符串<std::string>

我想找到与我在 std::vector 中寻找的字符串类似的字符串,如下所示: int main() { std::向量 v; v.push_back("hellostr"); v.push_back("这个...

回答 1 投票 0

Unicode 字符、C++ 和 libcurl

我使用stringstream和libcurl来下载数据。我也有一个解析函数。 布尔解析() { istringstream temp(buff.str()); buff.str(""); 串线; QString line_QStr,

回答 1 投票 0

为什么 libc++ 的 std::string 实现比 libstdc++ 占用 3 倍内存?

考虑以下测试程序: #包括 #包括 #包括 int main() { std::cout << sizeof(std::string("hi")) << " "; std::

回答 4 投票 0

为什么 sizeof(std::string) 只有八个字节?

为什么 std::string 的大小(由 sizeof(std::string) 确定)的结果是 8? 我认为它应该超过 8,因为它必须有一个 int (在我的机器上 sizeof(int) == 8)数据成员来提供 std::st...

回答 2 投票 0

从 gdb 设置 std::string 变量值?

当调试器在断点处停止时,是否可以修改 std::string 变量的值,而无需采取诸如调整当前缓冲区的内存映像之类的黑客手段? 例如。一些...

回答 1 投票 0

我可以将结构传递给`std::format`吗?

我有这个结构,我需要传递给 std::format: #包括 #包括 #包括 #包括 结构体{ 整数我; 浮动 f; ...

回答 1 投票 0

如何删除 std::string 上以“//”开头的每一行?

我有以下模板 std::string std::string myString = R"svg( // 我有以下模板 std::string std::string myString = R"svg( <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> // <rect {...rectProps} x={x1h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> // <rect {...rectProps} x={x1h} y={y1h} /> </svg> )svg"; 我想删除以 // 开头的每一行 所以我想要的结果就是这样的 <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> </svg> 编辑:所以我现在的想法是迭代每一行,修剪它,然后检测它是否以“//”开头 到目前为止我有这个伪 std::istringstream stream(myString); std::string line; std::string myFinalString; while (std::getline(stream, line)) { // TODO: trim line first bool isComment = false; // Find here if the line starts with // if (!isComment) { myFinalString += line + "\n"; } } 最简单的方法是使用正则表达式库: #include <iostream> #include <regex> int main() { std::string myString = R"svg( <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> // <rect {...rectProps} x={x1h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> // <rect {...rectProps} x={x1h} y={y1h} /> </svg> )svg"; std::cout << myString << std::endl; //before std::string new_string = std::regex_replace(myString, std::regex("\n *//.*\n"), "\n"); std::cout << new_string << std::endl; //after } 我们捕获所有以新行 \n 开头、具有零个或多个空格 *、两个斜杠 // 以及零个或多个以另一新行结尾的任何字符 .* 的模式。我们仅用一个新行替换出现的事件(以补偿其中一个)。 输出: <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> // <rect {...rectProps} x={x1h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> // <rect {...rectProps} x={x1h} y={y1h} /> </svg> <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> </svg> 基于 std::basic_string::find_first_not_of 找到的 '/' 的数量使用 std::basic_string::erase 的简单性很难被击败,例如 std::string s { "//Some comment" }; if (s.at(0) == '/') s.erase (0, s.find_first_not_of ("/")); 您还可以通过将 "//" 添加到拒绝字符来删除 " \t" 之前的任何前导空格: std::string s { " //Some comment" }; if (s.at(s.find_first_not_of (" \t/") - 1) == '/') s.erase (0, s.find_first_not_of (" \t/")); (注意: - 1 与 at() 是必需的,因为它需要从零开始的索引,而 erase() 需要删除字符数) 然后要处理 "//" 周围的前导和尾随空白,您可以 #include <cctype> 并使用 isspace(c),如下所示: std::string s { " // Some comment" }; char c = s.at(s.find_first_not_of (" \t/") - 1); if (c == '/' || isspace (c)) s.erase (0, s.find_first_not_of (" \t/")); 在所有情况下,结果都是"Some comment"。 没有按我的预期工作 除了它之外,它绝对不会按照你的方式工作。 您使用的 erase 的过载看起来像 string& erase( size_type index = 0, size_type count = npos); 来自 cppreference 的重载描述: 删除从索引开始的 min(count, size() - index) 个字符。 所以你真正做的svg.erase(0, svg.find("//") + 1)是删除从索引[0]到[你找到的最后一个'/'的索引]的所有字符 相反,您应该执行以下操作: 在字符串中搜索 "//",将此位置命名为 A。 在字符串中搜索 '\n',将此位置命名为 B。 擦除间隔[A; B] 来自字符串或 [A; svg.length()] 如果你没有找到 B 重复直到没有位置A P.s.我建议从末尾而不是从头开始搜索,因为如果它更接近末尾而不是开头,则擦除片段形式的字符串会更容易 P.p.s.如果您想精确删除间隔,请务必使用迭代器,因为删除间隔的 erase 的唯一重载是 iterator erase( const_iterator first, const_iterator last ); 最后这就是我找到的解决方案 std::string trim(const std::string &str) { size_t first = str.find_first_not_of(' '); if (std::string::npos == first) { return str; } size_t last = str.find_last_not_of(' '); return str.substr(first, (last - first + 1)); } bool startsWith(const std::string &input, const std::string &start) { return input.find(start) != std::string::npos; } std::string myString = R"svg( <svg height={size} width={size}> <rect {...rectProps} x={x0h} y={y0h} /> // <rect {...rectProps} x={x1h} y={y0h} /> <rect {...rectProps} x={x0h} y={y1h} /> // <rect {...rectProps} x={x1h} y={y1h} /> </svg> )svg"; std::istringstream stream(myString); std::string line; std::string myFinalString; while (std::getline(stream, trim(line))) { if (!startsWith(line, "//")) { myFinalString += line + "\n"; } }

回答 4 投票 0

使自定义类型的行为类似于 std::string

我必须定义一些包含 std::string 类型成员的结构。我需要让它们表现得像 std::string 。换句话说,它们应该可以简单地转换为 std::string 但不能转换为...

回答 1 投票 0

字符串移动后,std::string::c_str()返回的数据仍然有效吗?

假设我有一个异步发送 const char * 数据的函数,并在发送数据或发生错误时调用回调(我省略了与问题无关的错误处理): 无效

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.