C++ 将子字符串从const char*复制到std::string

C++ 将子字符串从const char*复制到std::string,c++,C++,是否有允许将子字符串复制到std::string的复制函数 范例- const char *c = "This is a test string message"; 我想将子字符串“test”复制到std::string。您可以使用这个std::string的构造函数: string(const string& str, size_t pos, size_t n = npos); 用法: std::cout << std::string("012345", 2, 4) &

是否有允许将子字符串复制到std::string的复制函数

范例-

const char *c = "This is a test string message";

我想将子字符串“test”复制到std::string。

您可以使用这个
std::string
的构造函数:

string(const string& str, size_t pos, size_t n = npos);
用法:

std::cout << std::string("012345", 2, 4) << std::endl;

const char* c = "This is a test string message";
std::cout << std::string(c, 10, 4) << std::endl;

(编辑:showcase示例)

您可以编写一个:

#include <assert.h>
#include <string.h>
#include <string>

std::string SubstringOfCString(const char *cstr,
    size_t start, size_t length)
{
    assert(start + length <= strlen(cstr));
    return std::string(cstr + start, length);
}
#包括
#包括
#包括
std::string SubstringOfCString(const char*cstr,
尺寸(开始,尺寸长度)
{

assert(start+length您可以使用
std::string
以C字符串的子字符串对其进行初始化,例如:

const char *sourceString = "Hello world!";
std::string testString(sourceString + 1, sourceString + 4);

您可能希望使用
std::string\u视图(C++17以后)作为
std::string
的替代:

#include <iostream>
#include <string_view>

int main()
{
    static const auto s{"This is a test string message"};
    std::string_view v{s + 10, 4};
    std::cout << v <<std::endl;
}
#包括
#包括
int main()
{
static const auto s{“这是一个测试字符串消息”};
字符串视图v{s+10,4};

std::cout实际上,如果你以那种方式使用构造函数,你会隐式地调用
std::string(std::string(“012345”),2,4);
,即双重构造(一个是临时的)。当然你是对的,但我看不出有什么问题(不是像这样措辞的问题)。然后是
std::string(const char *字符,sisigt chassLin)< /C>构造函数,它将被写为“代码> STD::String(“012345”+2, 4);< /代码>或“代码> STD::CUT+1,用于指出指针只是另一个随机访问迭代器。简单漂亮!”Doc Brown,史葛,谢谢!我想我们真的回到了1985,用C++和ALL!!)完全错误-
my_c
指向
“这是一条测试字符串消息”
,您可以通过将此示例制作成程序看到这一点。
const char *c = "This is a test string message";
std::string str(c);
str.substr(0, 4); 
const char *my_c = str.c_str(); // my_c == "This"
#include <iostream>
#include <string_view>

int main()
{
    static const auto s{"This is a test string message"};
    std::string_view v{s + 10, 4};
    std::cout << v <<std::endl;
}