小编mol*_*ita的帖子

如果它们存在,如何有效地从std :: string中删除双引号

这个问题有可能是重复的,例如从c ++中的字符串中删除双引号, 但是我看到的所有asnwers都没有解决我的问题
我有一个字符串列表,其中一些是双引号而另一些则不是,引号总是在开头并结束

std::vector<std::string> words = boost::assign::list_of("words")( "\"some\"")( "of which")( "\"might\"")("be quoted");
Run Code Online (Sandbox Code Playgroud)

我正在寻找最有效的方法来删除报价.这是我的尝试

for(std::vector<std::string>::iterator pos = words.begin(); pos != words.end(); ++pos)
{
  boost::algorithm::replace_first(*pos, "\"", "");
  boost::algorithm::replace_last(*pos, "\"", "");
  cout << *pos << endl;
}
Run Code Online (Sandbox Code Playgroud)

我能做得比这更好吗?我可能有数十万个字符串要处理.它们可能来自文件或数据库.示例中的std :: vector仅用于说明目的.

c++ stdstring

11
推荐指数
2
解决办法
2万
查看次数

如何有效地将std :: string复制到向量中

我有一个字符串

std::string s = "Stack Overflow";
Run Code Online (Sandbox Code Playgroud)

我需要复制到矢量中.这就是我这样做的方式

std::vector<char> v;
v.reserve(s.length()+1);
for(std::string::const_iterator it = s.begin(); it != s.end(); ++it)
{
    v.push_back( *it );
}
v.push_back( '\0' );
Run Code Online (Sandbox Code Playgroud)

但我听说范围操作更有效率.所以我在想这样的事情

std::vector<char> v( s.begin(), s.end());
v.push_back('\0');
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,这样做会更好吗?插入'\ 0'时潜在的重新分配怎么样?
我想的另一种方法就是这样

std::vector<char> v(s.length()+1);
std::strcpy(&v[0],s.c_str());
Run Code Online (Sandbox Code Playgroud)

也许速度快但可能不安全?
编辑
必须是一个空终止字符串,可以在C函数内使用(读/写)

c++ stdstring stdvector

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

stdstring ×2

stdvector ×1