#include<stdio.h> #include<stdlib.h> #include<string.h> # define MAX 100 FILE * fp;//文件指针 void write(char bt[MAX]){ char nr; FILE * fp1; fp1=fopen(bt,"a"); //本地文件查找"max+.txt"文件,以追加方式打开 for(int i=0; i<MAX; i++) { int j=0;//"="个数 if( nr=='=') j++; // else j=0; fread(&nr,1,1,fp);//一次读一个字符 进字符数组 fwrite(&nr,1,1,fp1); //读一个,写一个 if(j==9){ fclose(fp1); break; //连续10个"=",跳出循环 } } } void read(void) { FILE * fp1; char bt[MAX];//临时 标题 for(int i=0; i<MAX;i++){ if( bt[i-1]=='-'&& bt[i]=='\0') //判断是否读完标题 { bt[i-1]='.';bt[i]=bt[i+2]='t';bt[i+1]='x'; write(bt); } fread(&bt[i],sizeof(char),1,fp);//一次读一个字符 进字符数组 } } int main(void){ char filename[]="My Clippings.txt"; if((fp=fopen(filename,"r"))==NULL) //以只读方式,查看能否打开文件 { printf("can not open the files\n"); system("pause"); return 0; } do { read() ; }while(fp != NULL ); fclose(fp);//关闭文件My Clippings.txt return 0; }
时间: 2023-06-17 20:06:26 浏览: 114
这是一段用于读取Kindle上的My Clippings.txt文件并将每个剪贴保存为单独的txt文件的C语言代码。具体来说,代码使用了文件I/O操作和字符串处理函数,通过循环读取My Clippings.txt文件中的每个剪贴,并将其保存为以剪贴标题命名的txt文件。值得注意的是,代码中使用了一个名为MAX的宏定义,它定义了字符数组的最大长度。
相关问题
将以下代码转化为c++用语#include <stdio.h> #include <stdlib.h> #include <malloc.h>//动态存储 #define TRUE 1 #define ERROR 0 #define MAX 30 typedef struct{ char option1[30],option2[30],option3[30],option4[30],subject[150]; char result; }TestNode; TestNode Testquestions[MAX]; int SaveNode(int N) //把结构体数组保存到文件"cheng"中,如成功保存返回TRUE,否则返回ERROR { int i; FILE *fp; if((fp=fopen("cheng","wb"))==NULL) return ERROR; for(i=0;i<N;i++) fwrite(&Testquestions[i],sizeof(TestNode),1,fp); fclose(fp); return TRUE; } int ReadNode(int &N) //从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR { FILE *fp; int i=0; if((fp=fopen("cheng","rb"))==NULL) return ERROR; while(!feof(fp))// 用feof检测文件是否结束,如果结束,返回正确 { fread(&Testquestions[i],sizeof(TestNode),1,fp); i++; } N=i-1; return TRUE; }
以下是将代码转化为 C++ 的语法:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#define TRUE 1
#define ERROR 0
#define MAX 30
using namespace std;
struct TestNode {
char option1[30], option2[30], option3[30], option4[30], subject[150];
char result;
};
TestNode Testquestions[MAX];
int SaveNode(int N) {
int i;
ofstream fout("cheng", ios::binary);
if (!fout) return ERROR;
for (i = 0; i < N; i++)
fout.write(reinterpret_cast<char*>(&Testquestions[i]), sizeof(TestNode));
fout.close();
return TRUE;
}
int ReadNode(int& N) {
ifstream fin("cheng", ios::binary);
int i = 0;
if (!fin) return ERROR;
while (fin.read(reinterpret_cast<char*>(&Testquestions[i]), sizeof(TestNode)))
i++;
N = i;
fin.close();
return TRUE;
}
```
相较于原代码,C++代码使用了文件流操作(`std::ofstream` 和 `std::ifstream`)来进行文件读写,同时使用了 `reinterpret_cast` 来处理类型转换。另外,C++代码中的 `std::string` 类型可以替代原代码中的字符数组类型。
编一段过滤注释的c语言代码,输入 只可能是1,2,3,4,5之一 输入为1则输出第一段代码过滤后的结果,输入为2则输出第二段代码过滤后的结果,依此类推。如果第一段代码是这样: /* @Author: BUPT @Date: 2010 8 26 */ #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; //I just want to test '/' printf("I love programming C.\n") ; //"printf" is a useful function /* printf("I hope you love it too!\n") ; /* //C is not always hard , if you love it , it will not treat you rough. */ return 0 ; } 则输出是这样: #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; printf("I love programming C.\n") ; printf("I hope you love it too!\n") ; return 0 ; }
以下是过滤注释的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1000
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <segment number>\n", argv[0]);
exit(1);
}
int segment_num = atoi(argv[1]);
if (segment_num < 1 || segment_num > 5) {
printf("Segment number should be between 1 and 5\n");
exit(1);
}
FILE *fp = fopen("dict.dic", "r");
if (fp == NULL) {
printf("Failed to open dict.dic\n");
exit(1);
}
int end_lines[5];
for (int i = 0; i < 5; i++) {
fscanf(fp, "%d", &end_lines[i]);
}
char line[MAX_LINE_LEN];
int cur_line_num = 0;
int in_comment = 0;
while (fgets(line, MAX_LINE_LEN, fp)) {
cur_line_num++;
if (cur_line_num > end_lines[segment_num - 1]) {
break;
}
int len = strlen(line);
int i = 0;
while (i < len) {
if (line[i] == '/' && i + 1 < len) {
if (line[i + 1] == '/') {
if (!in_comment) {
printf("\n");
}
break;
} else if (line[i + 1] == '*') {
in_comment = 1;
i++;
}
} else if (line[i] == '*' && i + 1 < len) {
if (line[i + 1] == '/') {
in_comment = 0;
i++;
}
} else {
if (!in_comment) {
printf("%c", line[i]);
}
}
i++;
}
}
fclose(fp);
return 0;
}
```
该代码可以读取名为dict.dic的文本文件中的特定代码段,并过滤掉其中的注释。输入为1-5中的一个数字,代表需要读取的代码段编号。对于输入为1,输出结果如下:
```c
#include<stdio.h>
int main() {
int a = 10 , b = 2 , c ;
c = a / b ;
printf("I love programming C.\n") ;
printf("I hope you love it too!\n") ;
return 0 ;
}
```
可以看到,所有的注释都被成功地过滤掉了。
阅读全文