试图从用户C ++输入的代码中删除注释

时间:2014-10-05 05:05:01

标签: c++ string visual-c++ erase

string code;
cout << "Enter code\n";
getline(cin, code, '~');

size_t comment = code.find('/*');
size_t second = code.find('*/', comment);
size_t first = code.rfind('/*', comment);


code.erase(first, second - first);


cout << code << '\n';

INPUT

/*comment

comment*/

okay~

输出

//

okay

=============

程序删除/ * * /之间的所有内容,但不会删除/ /。我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

是的,你错过了两个反斜杠,

实际上,您应该使用

code.erase(first-1, second - first+2);

这种情况正在发生,因为string.erase(first,last)删除了[first,last)范围内的字符

即。它包括第一个但不包括最后一个,

注意:字符串中的第一个字符用值0表示(不是1)。

我希望有所帮助 有关更多信息,请参阅this webpage

答案 1 :(得分:0)

试试这个:

size_t comment = code.find("/*");        
size_t second = code.find("*/", comment); // here it returns the index from where `*/` starts so you      should also delete these two charater that why i added 2 in erase function.
size_t first = code.rfind("/*", comment);


code.erase(first, (second - first)+2);  
cout << code << '\n';