gpt4 book ai didi

c++ - 在 char* 指针中复制 std::string 的一部分

转载 作者:行者123 更新时间:2023-12-05 05:34:56 25 4
gpt4 key购买 nike

假设我有这个 C++ 代码片段

char* str;
std::string data = "This is a string.";

我需要在str 中复制字符串data(第一个和最后一个字符除外)。我的解决方案似乎是创建一个子字符串,然后像这样执行 std::copy 操作

std::string substring = data.substr(1, size - 2);
str = new char[size - 1];
std::copy(substring.begin(), substring.end(), str);
str[size - 2] = '\0';

但也许这有点矫枉过正,因为我创建了一个新字符串。有没有更简单的方法来实现这个目标?也许在 std:copy 调用中使用 offets

谢谢

最佳答案

如上所述,您应该考虑将子字符串保留为 std::string 并使用 c_str()当您需要访问底层字符时的方法。

然而-
如果您必须通过 new 将新字符串创建为动态 char 数组,您可以使用下面的代码。

它检查 data 是否足够长,如果是,则为 str 分配内存并使用 std::copy 类似于您的代码,但使用适配的迭代器

注意:不需要为子字符串分配一个临时的std::string

代码:

#include <string>
#include <iostream>

int main()
{
std::string data = "This is a string.";
auto len = data.length();
char* str = nullptr;
if (len > 2)
{
auto new_len = len - 2;
str = new char[new_len+1]; // add 1 for zero termination
std::copy(data.begin() + 1, data.end() - 1, str); // copy from 2nd char till one before the last
str[new_len] = '\0'; // add zero termination
std::cout << str << std::endl;

// ... use str

delete[] str; // must be released eventually
}
}

输出:

his is a string

关于c++ - 在 char* 指针中复制 std::string 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73583786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com