我正在尝试执行一个项目,删除以前编写的程序中的注释。根据我的理论,我认为它应该工作,但由于某种原因,输出文件最终总是空的...请以任何方式帮助你...(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;
}
}
}
答案 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;
始终将发现设置为真。