写一个C++程序,使其能够删除源代码文件中的所有注释语句(包括以// 和/* */两种)

主要是第二种

#include<iostream>
#include<string>
using namespace std;
/*
string::npos表示没找到
  */
int main(){
string s = "int a=1;//aaa\nint b=2;//bbb\n/*this is comment.*/int c=a+b;//ccc";//文本代码
while(1){
if(s.find("//")!=string::npos){
size_t pos = s.find("//");
size_t end = s.find("\n",pos);//从pos位置开始寻找
size_t len = end - pos;
s.erase(pos,len);//删除pos位置开始后长度为len的字符串
}else if(s.find("/*")!=string::npos){
size_t pos = s.find("/*");
size_t end = s.find("*/",pos);
string temp("*/");
size_t len = end - pos + temp.length();
s.erase(pos,len);
}else
break;
}
cout<<s<<endl;
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-09
用栈就好了

求一个C++程序,可以去掉C++头文件和源文件中的注释行。
0和7是等价的状态,但是可以用7状态做些特别的事情,比如这个时候删除刚找到的注释等。最后的程序如下,输入输出还是用C的文件比较方便:include "stdio.h"include "string"char fsm[8][128];void initfsm(){ const int line_len=sizeof(char)*128;memset(fsm[0],0,line_len);memset(fsm[1],...

编写一个删除C语言程序中所有注释语句
fp1);}fcloseall();return 0;}如果有\/* *\/块注释的话,用这个#include <stdio.h>#include <string.h>int main(){ FILE *fp,*fp1; char str[99]="",str1[99]=""; int i,j,no=0; fp=fopen("test.c","r"); \/\/要打开的源文件 fp1=fopen("new.c","w"); ...

C++中的注释,如\/\/和\/* *\/的注释内容,会参与编译吗?即反编译时会被看到...
C语言包含34个运算符,它将赋值、括号等均是作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。可对物理地址进行直接操作:C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系...

为代码添加多行注释的语法(代码如何多行注释)
c++如何进行多行注释,谁能写出代码1、快捷键:Ctrl+E+C注释当前选中的内容Ctrl+e+u取消所选中的所有注释C#注释一般常用的有以下几种。1,单行注释;以【\/\/】开头,可以写一行注释内容。只对每一行【\/\/】开始的位置起作用。2、C语言多行注释的用法一种是以\/*开始、以*\/结束的块注释(blockcomment...

编写C++程序,按顺序列出某个目录下的所有文件的相对路径和最后修改时间...
<string.h>#include <string>using namespace std;\/\/显示指定目录下的所有文件int ShowDir(string strDir){ struct _finddata_t c_file; long hFile; if((hFile = _findfirst( strDir.c_str(), &c_file )) == -1L ) { return -1; } while( _findnext( hFile, &c...

在一个C源程序中,注释部分两侧的分界符分别为___和___
答案是\/* 和 *\/ C语言中支持两种注释,一种单行注释,之中多行注释。--- 首先是单行注释,符号位两个双斜杠 \/\/ 截图为主,双斜杠后面的绿色部分就是注释 另外一种是多行注释 \/* 和 *\/ 例子就是这样,因为是两个空,所以考的的多行注释 ...

用C++实现cd 和删除文件的功能,也就是写一个程序,实现cmd里面的cd功 ...
if(STATE==-1){ printf("\\n DOES NOT MAKE FILE IN ORDER NAME BY %S \\n",MF);} else printf("\\n %s HAVE BEEN MAKEED! \\n",MF);} void DELETE(void){\/\/删除文件 char NAME[CONST];int STATE;printf("input you need...

用C++写一个完整程序,删除磁盘中所有的msgEx.db这个文件
把一个服务关闭 控制面板---管理工具---服务 关闭SQL Server服务

C++编写程序实现将用户输入的字符串中所有的大写英文字母删除?
\/\/C++的cctype头文件中有名为isupper()的函数。\/\/我写了段代码,你看懂了就知道该怎么做了。include<cctype> include<stdio.h> int main(void){ if (isupper('A')){ printf("这是一个大写字母,我们删除它!\\n");\/\/ 你可以放置删除此字符的代码 } if ( !isupper('a')){ printf("不是...

c语言中\/\/与\/**\/的区别是什么?
c语言中\/\/与\/* *\/的区别如下bai:①是否为单行注释 \/\/是用于du多种语言的zhi单行注释语句。\/**\/是注释语句,不限制行数,在dao“\/*”和“*\/”之间的即为注释。②实用性的区别 \/\/是用于多种语言的单行注释语句,适用方便快捷,但是实用性不如多行注释 \/**\/是注释语句,不限制行数,在“\/*...

相似回答