一:实验目的
对源程序进行预处理(函数实现、该函数以后还要用到;输入是源程序,输出是预处理过的程序)。
二:实验内容
对源程序进行预处理、去掉空格、跳格、回车、换行、注释等。
三:实验要求
从文本文件读入源代码文本字符串、预处理结束后写入另一个文本文件中。
四:实验过程
1.实验步骤
(1)删除代码中的空格、跳格、换行、回车
void del_space_tab_lineFeed_enter(char *str) {
char s[1000]; // 存储输入文本
int i = 0;
int point = 0, next = 0;
strcpy(s,str); // 将输入文本的内容复制到s字符数组中
while(s[point] != '\0') {
if(s[point] == ' ' || s[point] == '\n' || s[point] == '\r' || s[point] == '\t') {
// 当前下标是空格,next下标加1,判断后面的是否为待删除内容,直到不是
next = point + 1;
while(s[next] == ' ' || s[next] == '\n' || s[next] == '\r'|| s[next] == '\t') {
next++;
}
point = next;
} else {
// 当前下标不是待删除内容,让当前的str[i]等于s[point],使得str中的内容恒不为待删除内容
str[i] = s[point];
i++;
point++;
}
}
while(str[i++] != '\0')
str[i-1] = '\0';
}
(2)删除注释
//删除文档里的注释
void del_comments(char *str){
int i;
for(i=0; str[i] != EOF; i++){
if(str[i] == '/' && str[i+1] == '/') {
str[i] = '\0';
str[i+1] = '\0';
break;
}
}
}
(3)主程序
void main() {
char str[1000];
char ss[99] = " ";
FILE *fr, *fw;
fr = fopen("input.txt", "r"); // 读取文档
fw = fopen("output.txt", "w"); // 存入文档
while(fgets(str, 99, fr) != NULL){
// 对文档里的字符进行按行处理
del_comments(str); // 删除注释
strcat(ss, str);
}
// 在回车和换行操作结束后,字符串与字符串之间可能会有空格,
// 因此将所有的字符串合并成一个大字符串再进行一次空格删除的处理
printf("%s\n", ss);
del_space_tab_lineFeed_enter(ss);
printf("%s", ss);
fputs(ss, fw); //存入文档
fclose(fr); //关闭文档
fclose(fw);
printf("\n");
return;
}
(4)代码整合
#include<stdio.h>
#include<string.h>
void del_space_tab_lineFeed_enter(char *str) {
char s[1000]; // 存储输入文本
int i = 0;
int point = 0, next = 0;
strcpy(s,str); // 将输入文本的内容复制到s字符数组中
while(s[point] != '\0') {
if(s[point] == ' ' || s[point] == '\n' || s[point] == '\r' || s[point] == '\t') {
// 当前下标是空格,next下标加1,判断后面的是否为待删除内容,直到不是
next = point + 1;
while(s[next] == ' ' || s[next] == '\n' || s[next] == '\r'|| s[next] == '\t') {
next++;
}
point = next;
} else {
// 当前下标不是待删除内容,让当前的str[i]等于s[point],使得str中的内容恒不为待删除内容
str[i] = s[point];
i++;
point++;
}
}
while(str[i++] != '\0')
str[i-1] = '\0';
}
//删除文档里的注释
void del_comments(char *str){
int i;
for(i=0; str[i] != EOF; i++){
if(str[i] == '/' && str[i+1] == '/') {
str[i] = '\0';
str[i+1] = '\0';
break;
}
}
}
void main() {
char str[1000];
char ss[99]=" ";
FILE *fr, *fw;
fr = fopen("input.txt", "r"); // 读取文档
fw = fopen("output.txt", "w"); // 存入文档
while(fgets(str, 99, fr) != NULL){
// 对文档里的字符进行按行处理
del_comments(str); // 删除注释
strcat(ss, str);
}
// 在回车和换行操作结束后,字符串与字符串之间可能会有空格,
// 因此将所有的字符串合并成一个大字符串再进行一次空格删除的处理
printf("%s\n",ss);
del_space_tab_lineFeed_enter(ss);
printf("%s",ss);
fputs(ss,fw);//存入文档
fclose(fr);//关闭文档
fclose(fw);
printf("\n");
return;
}
2.实验结果记录
(1)输入文本
#include <studio.h>
// 这是一个源程序
void main(){
print("Hello\nWorld\n\rI'm\tfocus");
return 0;
}
(2)运行结果
(3)输出文本
#include<studio.h>voidmain(){print("Hello\nWorld\n\rI'm\tfocus");return0;}