小编Tor*_*erk的帖子

在std :: string上执行正则表达式搜索和替换

我有一个模式'"XYZ\d\d'和一个'较大'的字符串,这种模式可以多次出现.

我的目标是在字符串中找到模式的所有实例,然后用原始字符串中的字母"A"替换该匹配中的所有字符.

到目前为止我已经得到了以下内容,但是有一个错误:

#include <iostream>
#include <regex>

int main() {
    std::regex  exp("XYZ\\d\\d");
    std::smatch res;
    std::string str = " XYZ111 d-dxxxxxxx XYZ222 t-nyyyyyyyyy XYZ333 t-r ";

    auto itr = str.cbegin();

    while (std::regex_search(itr, str.cend(), res, exp)) {

        std::cout << "[" << res[0] << "]" << std::endl;

        for (auto j = res[0].first; j != res[0].second; ++j) {
           *j = 'A';  // Error as dereferencing j causes a const reference
        }

        itr += res.position() + res.length();
    }

    std::cout << std::endl;

    std::cout << "mod: " …
Run Code Online (Sandbox Code Playgroud)

c++ regex string search c++11

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

是否定义了ofstream实现的默认模式?

给出以下代码:

std::ofstream stream("somefile");

if (!stream)
{
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

调用.write(....)并使用stdc ++libc ++时,流处于二进制模式(std::ios::binary)。

但是,当使用MSVC (2015 / 2017RC1)时,它似乎处于文本模式或某种奇怪的状态,因为生成的文件大于实际写入的文件。

但是,如果我明确设置了模式,则std::ios::binaryMSVC的行为与std::ofstream前面提到的其他标准库的实现类似。


示例代码:

#include <vector>
#include <cstdio>
#include <fstream>

std::size_t fsz(const char* filename) {
    std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
    return static_cast<std::size_t>(in.tellg());
}

int main() {
   std::ofstream stream("filename");

   if (!stream)
      return 1;

   std::vector<unsigned long long int> v = {0x6F1DA2C6AC0E0EA6, 0x42928C47B18C31A2, 0x95E20A7699DC156A, 0x19F9C94F27FFDBD0};

   stream.write(reinterpret_cast<const char*>(v.data()),v.size() * sizeof(unsigned long long int));

   stream.close();

   printf("expect: %d\n", …
Run Code Online (Sandbox Code Playgroud)

c++ iostream ofstream unspecified-behavior c++11

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

标签 统计

c++ ×2

c++11 ×2

iostream ×1

ofstream ×1

regex ×1

search ×1

string ×1

unspecified-behavior ×1