如何在c ++中从文件中读取和删除特定字符之间的字符串

时间:2014-02-07 02:37:07

标签: c++ string text-files

您好我想阅读并删除/ *和(星号) /之间的某些部分。 / (这里是星号)和* /之间有多行。所以我想我必须从文本文件中读取所有行并检查它们。使用while循环中的substr()方法可以很容易地删除单行上的字符串。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用shell进程来帮助您:

cat example.c | tr -d "/\*.*\*/" > new_example.c

答案 1 :(得分:1)

您可以将文件的所有内容都读成字符串,例如:

#include <fstream>
#include <string>
#include <cerrno>
#include <iostream>

std::string contents;
std::ifstream in("c:\\file.txt", std::ios::in | std::ios::binary);
if (in) {    
    in.seekg(0, std::ios::end);
    contents.resize(in.tellg());
    in.seekg(0, std::ios::beg);
    in.read(&contents[0], contents.size());
    in.close();
}

然后,使用正则表达式,您可以提取/ *和* /:

之间的所有内容
#include <regex>

std::smatch m;
std::regex e ("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)");

while (std::regex_search (contents, m, e)) {
    for (auto x : m) {
        std::cout << x << std::endl;
    }
    contents = m.suffix().str();
}

对于每个匹配,/ *和* /之间的内容设置在变量m中,然后您可以操作它的内容。

读取这样的文件:

  

/ *

     

由Felipe Cardoso于2014年2月7日创建。

     

版权所有(c)2014 MobileCard。保留所有权利。

     

* /

     

第一行内容

     

第二行内容

     

/ *功能描述...... * /

     

文件结束

结果是:

match result