删除C+中注释的程序+;不起作用 我在C++中创建了一个程序,删除C/C++文件的注释,并在另一个文件中添加注释删除的版本。然而,经过数小时的调试,它仍然无法工作。救命啊
“input”是一个字符串,其中包含c/c++文件的文件夹位置。 “文件”是一个向量,包含文件夹中的所有文件名,但不包含其位置。 我使用“输入”和“文件”来获取文件名和位置删除C+中注释的程序+;不起作用 我在C++中创建了一个程序,删除C/C++文件的注释,并在另一个文件中添加注释删除的版本。然而,经过数小时的调试,它仍然无法工作。救命啊,c++,visual-studio-2012,visual-c++,fstream,C++,Visual Studio 2012,Visual C++,Fstream,“input”是一个字符串,其中包含c/c++文件的文件夹位置。 “文件”是一个向量,包含文件夹中的所有文件名,但不包含其位置。 我使用“输入”和“文件”来获取文件名和位置 for (unsigned int i = 0; i < files.size();i++ ){//for loop start iteratora++; string filename1 = input; filename1.append("\\"); filename1.append(files[iterator
for (unsigned int i = 0; i < files.size();i++ ){//for loop start
iteratora++;
string filename1 = input;
filename1.append("\\");
filename1.append(files[iteratora + 2]);
cout << "\n" << filename1 << ".\n";
cout << "Iterator: " << iteratora << ".\n";
programFile.clear();
ifstream afile (filename1);//(filename1);
fstream temp ("temp/temp.txt",std::ofstream::out | std::ofstream::trunc);
string line;//variable for holding the characters in one line
remove_comments(afile,temp);
if (temp.is_open())
{
while ( getline (temp,line) )
{
//cout << line << '\n';
if (line != ""){
cout << line;
programFile.push_back(line);
line = "";
}
}
temp.close();
}
temp.clear();
if (showVerbose == true){
print_vector(programFile);//used to know what is in the file
}
}
for(unsigned int i=0;i coutfind-method-of-string在搜索失败时返回std::string::npos,所以您应该写这一行
if(line.find("/*") < line.length())
进行类似的更改并尝试。这里是另一个解决方案。
它打开file.txt
并将整个文件加载到字符串中
注释并将字符串中的新数据写入文件.txt
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
string source;
ifstream readFile("file.txt");
getline(readFile, source, '\0');
readFile.close();
cout<<"\n---b e f o r e -----------------------------------\n\n";
cout << source;
while(source.find("/*") != string::npos) {
size_t Beg = source.find("/*");
source.erase(Beg, (source.find("*/", Beg) - Beg)+2);
}
while(source.find("//") != string::npos) {
size_t Beg = source.find("//");
source.erase(Beg, source.find("\n", Beg) - Beg);
}
ofstream writefile("file.txt");
writefile <<source;
writefile.close();
cout<<"\n\n-- a f t e r -------------------------------------------\n\n";
cout << source;
cout<<"\n---------------------------------------------\n\n";
cout<<"\n\n";
return 0;
}
#包括
#包括
#包括
使用名称空间std;
内部主(空){
字符串源;
ifstream readFile(“file.txt”);
getline(读取文件,源“\0”);
readFile.close();
一个在C++中删除注释的程序可能不那么容易。=你做错了。字符串文字,预处理器命令等等……这是基本的,只是删除“//”和“/*”。风格评论你可以告诉我们为什么它不起作用,即具体问题吗?@Naan是的,我理解。首先没有其他类型的评论。只需使用regex,它大约有10行,而你应该使用第二行,第一行仍然有效,因为npos
为-1,这与联合国的最大值一致签名size\u type
,意味着它将大于或等于长度。当我直接读取源文件并打印其内容时,程序工作。当我尝试删除注释时,将其放入temp/temp.txt,然后打印temp/temp.txt的内容,它显示为该文件中没有任何内容。
if(line.find("/*") != std::string::npos)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
string source;
ifstream readFile("file.txt");
getline(readFile, source, '\0');
readFile.close();
cout<<"\n---b e f o r e -----------------------------------\n\n";
cout << source;
while(source.find("/*") != string::npos) {
size_t Beg = source.find("/*");
source.erase(Beg, (source.find("*/", Beg) - Beg)+2);
}
while(source.find("//") != string::npos) {
size_t Beg = source.find("//");
source.erase(Beg, source.find("\n", Beg) - Beg);
}
ofstream writefile("file.txt");
writefile <<source;
writefile.close();
cout<<"\n\n-- a f t e r -------------------------------------------\n\n";
cout << source;
cout<<"\n---------------------------------------------\n\n";
cout<<"\n\n";
return 0;
}