【发布时间】:2016-12-22 17:43:26
【问题描述】:
有没有办法在 C++ 中将字符串从 const char* 复制到 string?我正在尝试做这样的事情:
#include <iostream>
#include <string.h>
using namespace std;
int main(){
string s1;
const char* pStr = "Sample Text";
for(int i = 0; i < strlen(pStr); i++)
s1[i] = pStr[i];
cout<<s1<<endl;
return 0;
}
在我的情况下,s1 原来是空的。
【问题讨论】:
-
为什么不只是
s1 = pStr;?std::stringhas anoperator=overload forconst char*。答案是正确的,您需要先调整大小才能一次复制一个(或使用push_back或operator+=调整大小并为每个操作追加),但为什么要自己做呢? -
另外,旁注:虽然某些编译器可能会对其进行特殊处理以避免问题,但按照标准 C/C++,
for(int i = 0; i < strlen(pStr); i++)将一遍又一遍地重新计算pStr的长度(每次测试条件一次)。在循环外计算一次并将其保存到一个变量中并对其进行测试,如果您必须执行此类操作,或者仅使用指针算术并在*ptr是 NUL 字符时停止(因此您只扫描字符串一次,而不是 1 -X 次长度,1 次复制)。 -
奇怪的是,你为什么不先尝试显而易见的
s1 = pStr;,然后看看你得到了什么结果。