小编use*_*550的帖子

codecvt不是std头吗?

此代码使用Visual C++ 11进行编译,并在Windows 7上按预期运行,但无法使用Windows 7上的MinGW 4.7.0或Linux上的gcc 4.8.0进行编译.用-std=c++11旗帜编译

#include <codecvt>
#include <string>

// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.to_bytes(str);
}
Run Code Online (Sandbox Code Playgroud)

错误:

codecvt:没有这样的文件或目录.

c++ c++11

42
推荐指数
3
解决办法
3万
查看次数

如何使用boost :: spirit解析csv

我有这个csv线

std::string s = R"(1997,Ford,E350,"ac, abs, moon","some "rusty" parts",3000.00)";
Run Code Online (Sandbox Code Playgroud)

我可以用boost::tokenizer以下方法解析它:

typedef boost::tokenizer< boost::escaped_list_separator<char> , std::string::const_iterator, std::string> Tokenizer;
boost::escaped_list_separator<char> seps('\\', ',', '\"');
Tokenizer tok(s, seps);
for (auto i : tok)
{
    std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它是正确的,除了令牌"生锈"应该有双引号被剥离.

这是我尝试使用boost :: spirit

boost::spirit::classic::rule<> list_csv_item = !(boost::spirit::classic::confix_p('\"', *boost::spirit::classic::c_escape_ch_p, '\"') | boost::spirit::classic::longest_d[boost::spirit::classic::real_p | boost::spirit::classic::int_p]);
std::vector<std::string> vec_item;
std::vector<std::string>  vec_list;
boost::spirit::classic::rule<> list_csv = boost::spirit::classic::list_p(list_csv_item[boost::spirit::classic::push_back_a(vec_item)],',')[boost::spirit::classic::push_back_a(vec_list)];
boost::spirit::classic::parse_info<> result = parse(s.c_str(), list_csv);
if (result.hit)
{
  for (auto i : vec_item)
  {
    cout << i << endl;
   } …
Run Code Online (Sandbox Code Playgroud)

c++ csv boost boost-spirit boost-spirit-qi

7
推荐指数
2
解决办法
9624
查看次数

如何使用sed或Perl从xml文件中删除无效字符

我想摆脱所有无效的角色; 示例hexadecimal value 0x1A来自使用sed的XML文件.
什么是正则表达式和命令行?
编辑
添加了Perl标签,希望获得更多响应.我更喜欢单线解决方案.
编辑
这些是有效的XML字符

x9 | xA | xD | [x20-xD7FF] | [xE000-xFFFD] | [x10000-x10FFFF]
Run Code Online (Sandbox Code Playgroud)

regex perl sed

6
推荐指数
1
解决办法
6046
查看次数

如何使用字符串作为键和数组作为值声明和初始化关联数组

我是D的新手.我正在寻找相当于这个C++声明

typedef std::vector<std::string> the_value;
std::map<std::string,the_value> the_table;
Run Code Online (Sandbox Code Playgroud)

d

5
推荐指数
1
解决办法
91
查看次数

如何在 std::vector 中使用空指针

假设我有一个空终止字符串向量,其中一些可能是空指针。我不知道这是否合法。这是一个学习练习。
示例代码

std::vector<char*> c_strings1;
char* p1 = "Stack Over Flow";
c_strings1.push_back(p1);
p1 = NULL; // I am puzzled you can do this and what exactly is stored at this memory location
c_strings1.push_back(p1);
p1 = "Answer";
c_strings1.push_back(p1);
for(std::vector<char*>::size_type i = 0; i < c_strings1.size(); ++i)
{
  if( c_strings1[i] != 0 )
  {
    cout << c_strings1[i] << endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,即使我在位置c_strings1[1]
Question处有一个 NULL,向量的大小也是 3 。std::vector<char> 当您推送空值时,如何使用向量中到底存储了什么来 重写此代码?

编辑
我的问题的第一部分已得到彻底解答,但第二部分尚未得到解答。至少我不满意。我确实想看看vector<char>;的用法 不是一些嵌套变体或std::vector<std::string>那些熟悉的变体。所以这是我尝试过的(提示:它不起作用)

std::vector<char> c_strings2;
string …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

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

填充std :: vector <char>缓冲区的最佳方法

此缓冲区应包含相等长度的槽(本例中为3个)(本例中为20个)
缓冲区必须具有连续的内存,以便可以以非const方式传递给C函数.

const int slot_size = 20;
std::vector<char> vbuffer;
Run Code Online (Sandbox Code Playgroud)

此函数接受一个字符串,复制到所需大小的临时缓冲区,然后将其复制到 vbuffer

void prepBuffer( const std::string& s)
{
  std::vector<char> temp(slot_size);
  std::copy(s.c_str(), s.c_str() + s.length() + 1, temp.begin());
  vbuffer.insert(vbuffer.end(), temp.begin(), temp.end());
}
Run Code Online (Sandbox Code Playgroud)

测试功能

int main()
{
  vbuffer.reserve(60);
  prepBuffer( "Argentina");
  prepBuffer( "Herzegovina");
  prepBuffer( "Zambia");

  cout << &vbuffer[0] << endl;
  cout << &vbuffer[20] << endl;
  cout << &vbuffer[40] << endl;
}
Run Code Online (Sandbox Code Playgroud)

题.我的prepBuffer函数中有很多字符串复制.我正在寻找一种更好的方法来填充vbuffer最小的复制
编辑
插槽的大小在程序的其他地方确定.但是在编译时并不知道.

编辑

根据我接受的答案,我已经确定了这个版本

void prepBuffer(const std::string& s)
{
  assert(s.size() < slot_size );
  vbuffer.insert(vbuffer.end(), s.begin(), s.end());
  vbuffer.insert(vbuffer.end(), …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

4
推荐指数
1
解决办法
3586
查看次数

这个功能会泄漏内存吗?

下面的函数测试输入字符串是否包含double.

bool is_double(const std::string& str)
{
    char* p;
    strtod(str.c_str(), &p);
    return *p == 0;
}
Run Code Online (Sandbox Code Playgroud)

函数返回后指针p会发生什么?

c++

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

使用std :: copy在Windows上复制宽字符串

假设我有一个像这样的宽字符串

std::wstring s(L"Stack Over Flow");
Run Code Online (Sandbox Code Playgroud)

我想要复制到宽字符std::vector<wchar_t>(一个空终止字符串)的向量中使用std::copy
以下方法似乎工作
第一

std::vector<wchar_t> c( s.size() + 1 );
std::copy(s.c_str(), s.c_str() + s.length() + 1, c.begin());
wprintf( L"%s\n",&c[0] );
Run Code Online (Sandbox Code Playgroud)

第二

std::vector<wchar_t> d( s.size() + sizeof(wchar_t));
std::copy(s.c_str(), s.c_str() + s.length() + sizeof(wchar_t), d.begin());
wprintf( L"%s\n",&d[0] );
Run Code Online (Sandbox Code Playgroud)

但我认为第一个应该失败,因为我没有为结束的空字符分配正确的大小.我错过了什么?
编辑
不,我不想这样

std::vector<wchar_t> c(s.begin(), s.end()); <br>
Run Code Online (Sandbox Code Playgroud)

因为我正在调整现有缓冲区的大小
编辑
通过更改用例(使用类似C的API打印)我可以看到第二个版本可能是正确的.
首先 按预期打印Stack Over Flow????????
第二次打印Stack Over Flow

c++

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

Windows 上的静态链接 OpenGL 库

我想获取(或从源代码构建)静态链接到 Windows 上的 crt 的 OpenGL 库。

我不希望我的可执行文件需要 OPENGL32.dll。

我的编译器是 Visual C++ 9。

我从哪开始呢?OpenGL 网站将我引导到这个 wiki http://www.opengl.org/wiki/Getting_started 但是那个 wiki 告诉我“在所有三个主要的桌面平台(Linux、MacOS X 和 Windows)中,OpenGL 或多或少都带有系统”。我在 Windows 上。这个说法是真的吗。我如何验证这一点?

c++ visual-c++

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

标签 统计

c++ ×7

stdvector ×2

boost ×1

boost-spirit ×1

boost-spirit-qi ×1

c++11 ×1

csv ×1

d ×1

perl ×1

regex ×1

sed ×1

visual-c++ ×1