删除c语言中的所有注释语句
来源:互联网 发布:阳春市12345网络问政 编辑:程序博客网 时间:2024/05/20 13:06
原文链接:http://lixing123.com/archives/310
学习《C程序设计语言》到第1章最后,有一道题目:
- 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。
下面把代码贴出来:
- #include <stdio.h>
- int state;
- int c1,c2;
- void change_state(int c);
- int main(int argc, const char * argv[]) {
- int c;
- state = 0;
- c1 = 0;
- c2 = 0;
- while ((c=getchar())!=EOF) {
- c1 = c2;
- c2 = c;
- change_state(c);
- }
- if (/* DISABLES CODE */ (0)==1) {
- printf("just test://abcd");
- printf("just test:/*hello*/");
- }
- }
- /*状态机函数*/
- void change_state(int c){
- if (state==0) {//普通状态
- if (c=='/') {
- state = 1;
- }else if (c=='"'){
- state = 5;
- putchar(c);
- }else if (c=='\''){
- state = 6;
- putchar(c);
- }
- else{
- state = 0;
- putchar(c);
- }
- }else if (state==1) {//检测到1个'/'
- if (c=='/') {
- state = 2;
- }else if (c=='*'){
- state = 3;
- }else{
- state = 0;
- putchar(c1);
- putchar(c);
- }
- }else if (state==2) {// "//"注释状态
- if (c=='\n') {
- state = 0;
- putchar(c);
- }else{
- state = 2;
- }
- }else if (state==3) {// "/*"注释状态
- if (c=='*') {
- state = 4;
- }else{
- state = 3;
- }
- }else if (state==4) {
- if (c=='/') {
- state = 0;
- }else{
- state = 3;
- }
- }else if (state==5){//在"字符串里
- if (c=='"') {
- state = 0;
- putchar(c);
- }else if(c=='\\'){
- state = 7;
- putchar(c);
- }else{
- state = 5;
- putchar(c);
- }
- }else if (state==6){//在'字符里
- if (c=='\'') {
- state = 0;
- putchar(c);
- }else if(c=='\\'){
- state = 8;
- putchar(c);
- }else{
- state = 6;
- putchar(c);
- }
- }else if (state==7){//在"字符串里的"\"
- state = 5;
- putchar(c);
- }else if (state==8){//在'字符串里的"\"
- state = 6;
- putchar(c);
- }
- }
以本段代码作为输入,结果如下:
- #include <stdio.h>
- int state;
- int c1,c2;
- void change_state(int c);
- int main(int argc, const char * argv[]) {
- int c;
- state = 0;
- c1 = 0;
- c2 = 0;
- while ((c=getchar())!=EOF) {
- c1 = c2;
- c2 = c;
- change_state(c);
- }
- if ( (0)==1) {
- printf("just test://abcd");
- printf("just test:/*hello*/");
- }
- }
- void change_state(int c){
- if (state==0) {
- if (c=='/') {
- state = 1;
- }else if (c=='"'){
- state = 5;
- putchar(c);
- }else if (c=='\''){
- state = 6;
- putchar(c);
- }
- else{
- state = 0;
- putchar(c);
- }
- }else if (state==1) {
- if (c=='/') {
- state = 2;
- }else if (c=='*'){
- state = 3;
- }else{
- state = 0;
- putchar(c1);
- putchar(c);
- }
- }else if (state==2) {
- if (c=='\n') {
- state = 0;
- putchar(c);
- }else{
- state = 2;
- }
- }else if (state==3) {
- if (c=='*') {
- state = 4;
- }else{
- state = 3;
- }
- }else if (state==4) {
- if (c=='/') {
- state = 0;
- }else{
- state = 3;
- }
- }else if (state==5){
- if (c=='"') {
- state = 0;
- putchar(c);
- }else if(c=='\\'){
- state = 7;
- putchar(c);
- }else{
- state = 5;
- putchar(c);
- }
- }else if (state==6){
- if (c=='\'') {
- state = 0;
- putchar(c);
- }else if(c=='\\'){
- state = 8;
- putchar(c);
- }else{
- state = 6;
- putchar(c);
- }
- }else if (state==7){
- state = 5;
- putchar(c);
- }else if (state==8){
- state = 6;
- putchar(c);
- }
感谢@roma823 及其文章:http://blog.csdn.net/roma823/article/details/6364849
0 0
- 删除c语言中的所有注释语句
- 【K&R 习题 1-23】删除C/C++语言中的程序中的所有注释语句
- 编写一个删除c语言中的注释语句/* */的程序
- 编写一个删除C语言源程序中的所有注释语句,要正确处理带引号的字符串和字符常量。
- C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句
- 删除C语言程序中所有的注释语句,代码实现
- 编写一个删除C语言程序中所有注释语句的程序
- 删除C语言程序中所有的注释语句(有疑问)
- 编写一个删除C语言程序中所有注释语句,正确处理带引号的字符串与字符常量
- 删除C/C++中的注释-有限状态机(C语言实现)
- 第7周 C语言程序设计(新2版) 练习1-23 删除C语言程序中所有的注释语句(代码有问题?)
- c语言中的注释
- 练习1-23 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量
- c语言自动删除cpp文件中的注释 使用代码删除注释【Linux、mac下】
- 【1-23】编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。再c语言中,注释不允许嵌套。
- C语言源文件注释删除
- 删除Java代码中的所有注释
- 删除C程序中的注释
- 对C语言数据类型和变量的理解
- Java Web自定义MVC框架详解
- 如何在Windows中查找并端口占用和释放端口占用?
- Unsupported major.minor version 51.0错误的一个坑
- 利用ffmpeg做视频解码的顺序
- 删除c语言中的所有注释语句
- Android Service 服务(二)—— BroadcastReceiver
- 我的App开发之路:从零开始到上线赚钱
- Android中所见的Bundle是什么
- hi
- C++ namespace
- MQTT初识
- LoadRunner如何监控Linux与Windows
- linux 系统负载高 如何检查