我正在尝试编写一个代码,该代码将读取c ++文件,识别注释,并将注释中的每个单词存储到向量中。我的问题是我找不到单行评论的方法。
我的逻辑是:如果字符串缓冲区中的第一个字符是' /'检查第二个字符以确定它是单行还是多行注释。如果注释是单行,请读入由空格分隔的每个单词,直到我点击新行字符' \ n'。如果评论是多行的,我会读到每个单词,直到我点击另一个* /。所以这个代码片段是,
while(!input.eof())
{
string buffer;
input >> buffer;
//check if the line is comment
if(buffer[0] == '/')
{
//single line comment
if(buffer[1] == '/')
{
//read in until I hit newlineChar, and store all words into vector
while(buffer[0] != '\n')
{
input >> buffer;
vector.add(buffer);
}
}
//multiline comment
else if(buffer[1] == '*')
{
//read until I hit */ and store all words into vector
while(buffer[buffer.size()-1] != '*' && buffer[buffer.size()] != '/')
{
input >> buffer;
vector.add(buffer);
}
}
}
}
问题在于我对新行字符的理解。我不太清楚字符串如何处理新行char。我假设字符串将新行char视为另一个分隔符,就像空格一样。但即使在这种情况下,也必须有一种方法来识别使用字符串的行尾。什么可以解决这个问题?任何意见都表示赞赏。
编辑:接受用户4581301的建议,我添加了读取直到文件末尾的while循环。并且要注意具有提取运算符的行的问题,然后是//
std::cout<<"//this is not a comment.";
我可以想到避免这种情况的一种方法是使用getline和char *读取整行。
char buffer[200];
input.getline(buffer,200);
string tempStr = buffer;
vector.add(tempStr);
在这种情况下,如何将存储在vector中的单个字符串分解为单词?