用c++代码 将合法C语言源程序(.c)文件test.c中每行代码增加上行号,删除其中的 注释(用/ */或//形式),并将其保存为test.cpp
时间: 2024-05-04 11:17:00 浏览: 48
下面是一个实现该功能的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX_LINE_LEN 1024
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
exit(EXIT_FAILURE);
}
char *infile = argv[1];
char *outfile = "test.cpp";
FILE *infp = fopen(infile, "r");
if (infp == NULL) {
printf("Cannot open input file %s\n", infile);
exit(EXIT_FAILURE);
}
FILE *outfp = fopen(outfile, "w");
if (outfp == NULL) {
printf("Cannot open output file %s\n", outfile);
exit(EXIT_FAILURE);
}
char line[MAX_LINE_LEN];
int lineno = 1;
while (fgets(line, MAX_LINE_LEN, infp) != NULL) {
char *p = line;
while (isspace(*p)) {
p++;
}
if (*p == '\0') {
continue;
}
// 删除注释
char *q = strstr(line, "//");
if (q != NULL) {
*q = '\0';
} else {
q = strstr(line, "/*");
if (q != NULL) {
*q = '\0';
char *r = strstr(q + 2, "*/");
if (r != NULL) {
p = r + 2;
} else {
continue;
}
}
}
// 增加行号
fprintf(outfp, "%d: %s", lineno++, p);
}
fclose(infp);
fclose(outfp);
printf("Output written to %s\n", outfile);
return 0;
}
```
这个程序接受一个参数,即要处理的 C 语言源程序文件名。它会读入文件,逐行处理,将每行前面加上行号,然后删除注释。最后将处理结果输出到一个新的文件 test.cpp 中。注意,该程序只处理单行注释和多行注释,不会处理字符串中的注释。
阅读全文