我有一个模式'"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) 给出以下代码:
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)