从字符数组索引创建新字符串的最佳方式是什么?使用C++。

3

I got a chars array like

char ch[] = "This is a char array";

我想从索引n到索引j创建一个新的字符串,例如:

string str = stringFromChar(ch, 0, 5); //str = 'This'

1
char[] ch 这不是有效的语法。可能在C#中可以,但在C++中不行。 - David Haim
4个回答

6
你可以使用接受两个迭代器的构造函数来创建 std::string
std::string str(std::begin(ch), std::next(std::begin(ch), 5));

工作演示

在更一般的情况下,您可以使用std::next来同时定义起始迭代器和结束迭代器来从数组的任意部分创建一个字符串。

我倾向于在适用时使用C ++标准库,但知道您也可以使用指针算术运算实现相同的功能。

std::string str(ch, ch+5);

顺便问一下,std::next(std::begin(ch), 5) 和 std::begin(ch)+ 5 有什么不同? - Humam Helfawi
@HumamHelfawi std::nextstd::advance用于处理通过可能使用非连续内存(例如std::list等)的容器进行推进的情况。 - Cory Kramer
哦,我的天啊!我一直都在使用“+”的方式,而且我还以为我的代码可以在任何容器中运行。我真是太愚蠢了!谢谢! - Humam Helfawi

2

您可以直接编写

string str(ch, ch + 5); //str = 'This'

那么,通常的形式会是这样的。
string str(ch + i, ch + j); //str = 'This'

当i < j时:

如果第一个索引等于0,则也可以这样写:

string str(ch, n );

其中n是你将要放在创建对象中的字符数。例如:

string str( ch, 4 ); //str = 'This'

如果第一个索引不等于0,那么您也可以这样写:

或者

string str( ch + i, j - i ); //str = 'This'

0

你可以直接使用 beginend 函数...

#include<iostream>
#include<string>

int main() {

    char ch[] = "This is a char array";
    std::string str(std::begin(ch), std::end(ch));
    std::cout << str << std::endl;

    // system("pause");
    return 0;
}

0

只需使用迭代器构造函数(同时,char* 是有效的输入迭代器)

 std::string str(ch, ch + 5);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接