删除C+中注释的程序+;不起作用 我在C++中创建了一个程序,删除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

“input”是一个字符串,其中包含c/c++文件的文件夹位置。 “文件”是一个向量,包含文件夹中的所有文件名,但不包含其位置。 我使用“输入”和“文件”来获取文件名和位置

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;icoutfind-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;
}