最近在看《C程序设计语言》,发现真是一本好书。后悔当初学C的时候教材为什么不是这本书而是乔林和老谭呢?看了一会才发现,这本书不适合刚入门的C初学者。学过C之后再看这本书,会发现一些处理的细节和编程的规范,大有裨益。其实觉得很多时候,内功就是细节和底层的知识比别人知道的多。
前段时间在忙算法考试,还有JAVA大作业(Java编译器的前端工具),没时间将领会到的东西即使记录下来。可能这段时间会陆续放上其中一些练习的程序代码,还有对大作业的一些知识总结,还有赶紧做老师布置的任务。生活就是这样子,每天都在疲于奔命(我很受当幸福来敲门的影响),但愿苍天不负我。
里面有一道处理字符串的题目,有点意思。
//练习1-23:编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 1000
char line[MAXLINE];
int getline();
int main()
{
int i,j,k;
int length;
i = j = k = 0;
while ((length = getline()) > 0)
{
i = 0;
while(i < length)
{
if (line[i] == '"')
{
j = 1;
}
if (!j)
{
if (line[i] == '/' && line[i+1] == '*')
{
i += 2;
k = 1;
}
if (line[i] == '*' && line[i+1] == '/')
{
i += 2;
k = 0;
}
if (k == 1)
{
i++;
}
else
{
printf("%c",line[i]);
i++;
}
}
else
{
printf("%c",line[i]);
i++;
}
}
}
return 0;
}
int getline()//读取一行文本
{
int c,i;
for (i=0; i<MAXLINE-1 && (c = getchar()) !=EOF && c !='\n'; i++)
{
line[i] = c;
}
if (c == '\n')
{
line[i] = c;
i++;
}
line[i] = '\0';
return i;
}