从C ++字符串中删除注释

时间:2014-03-17 08:16:03

标签: c++ string stream

我正在尝试执行一个项目,删除以前编写的程序中的注释。根据我的理论,我认为它应该工作,但由于某种原因,输出文件最终总是空的...请以任何方式帮助你...(PS对不起,如果缩进是马虎,复制和粘贴似乎对我来说似乎没有好处。)

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

using namespace std; 


void comment_destroyer(ifstream&,ofstream&); 


int main (void) {


string filestart;  
string fileend;    
ifstream start;    
ofstream end;      


do {
    cout<<"Name of the file you want to remove comments from: ";
    cin >> filestart;
}  
while ( start.fail() );
cout << "What is the name of the file you want to call the stripped code?: ";
cin >> fileend; 

start.open ( filestart.c_str() );
end.open ( fileend.c_str() );

comment_destroyer (start, end);

start.close();
end.close();

return 0;
  }

// 
//Start of functions
//

void comment_destroyer(ifstream& start, ofstream& end){
    string line; 
    bool found = false;
    int i=0;

    while (! start.eof()){
        getline(start,line); 

        if (line.find("/*")<line.length())
        found = true;
        if (!found){
            for (int i=0;i<line.length();i++)
                {
                    if(i<line.length())
                    if ((line.at(i)=='/') && (line.at(i+1)=='/'))
                    break;
                    else
                    end<<line[i];
                }

        end<<endl;

        }
    if (found)
        {
            if (line.find("*/")< line.length())
            found == false;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

以下部分是错误的。而不是将false赋给您使用等于运算符。

if (found)
    {
        if (line.find("*/")< line.length())
        found == false;
    }
}

==更改为=

if (found)
    {
        if (line.find("*/")< line.length())
        found = false;
    }
}

答案 1 :(得分:1)

我认为你的情况是错误的。 如果找不到搜索的术语,string.find将返回std :: string :: npos。根据{{​​3}},这是-1,所以表达式

 if (line.find("/*")<line.length())
    found = true;

始终将发现设置为真。