From 0cb114e03098f3972fee4bb69958df1a97a7b2b1 Mon Sep 17 00:00:00 2001 From: juan Date: Sun, 3 Apr 2022 23:22:03 +0800 Subject: [PATCH] Add 3 probs --- semester2/pset3/1-filesOps.c | 111 +++++++++++++++++++++++++++++++++++ semester2/pset3/2-write.c | 71 ++++++++++++++++++++++ semester2/pset3/3-readFile.c | 26 ++++++++ 3 files changed, 208 insertions(+) create mode 100644 semester2/pset3/1-filesOps.c create mode 100644 semester2/pset3/2-write.c create mode 100644 semester2/pset3/3-readFile.c diff --git a/semester2/pset3/1-filesOps.c b/semester2/pset3/1-filesOps.c new file mode 100644 index 0000000..401228b --- /dev/null +++ b/semester2/pset3/1-filesOps.c @@ -0,0 +1,111 @@ +#include + +#define FILENAME dict.dic +#define BUFLEN 65535 + +void countChar(FILE *fp); +void countLines(FILE *fp); +void countCaps(FILE *fp); + +int main(void) { + FILE *fp = fopen("dict.dic", "r"); + + int op; + scanf("%d", &op); + switch (op) { + case (1): { + countChar(fp); + break; + } + case (2): { + countLines(fp); + break; + } + case (3): { + countCaps(fp); + break; + } + default: { + break; + } + } + + fclose(fp); + return 0; +} + +void countChar(FILE *fp) { + int cap = 0, low = 0, digits = 0, others = 0; + char buf; + while ((buf = fgetc(fp)) != EOF) { + if (buf >= 'A' && buf <= 'Z') { + cap++; + } else if (buf >= 'a' && buf <= 'z') { + low++; + } else if (buf >= '0' && buf <= '9') { + digits++; + } else { + others++; + } + } + printf("Task1:\n"); + printf("capital: %d\n", cap); + printf("lowercase: %d\n", low); + printf("digit: %d\n", digits); + printf("others: %d\n", others); +} +void countLines(FILE *fp) { + int lines = 0; + int maxlen, minlen; + int i; + char buf[BUFLEN]; + + // Firstly read one line + fgets(buf, BUFLEN * sizeof(buf[0]), fp); + lines++; + for (i = 0; buf[i] != '\n'; i++) { + } + maxlen = i; + minlen = i; + + while (fgets(buf, sizeof(buf), fp) != NULL) { + lines++; + for (i = 0; buf[i] != '\n'; i++) { + } + if (i > maxlen) { + maxlen = i; + } + if (i < minlen) { + minlen = i; + } + } + + printf("Task2:\n"); + printf("line: %d\n", lines); + printf("%d characters in max line.\n", maxlen); + printf("%d characters in min line.\n", minlen); +} +void countCaps(FILE *fp) { + char low[26] = {}; + char cap[26] = {}; + + char buf; + while ((buf = fgetc(fp)) != EOF) { + if (buf >= 'a' && buf <= 'z') { + low[buf - 'a']++; + } else if (buf >= 'A' && buf <= 'Z') { + cap[buf - 'A']++; + } + } + + printf("Task3:\n"); + printf("CAPITAL:\n"); + for (int i = 0; i < 26; i++) { + printf("%c:%d\n", i + 'A', cap[i]); + } + + printf("LOWERCASE:\n"); + for (int i = 0; i < 26; i++) { + printf("%c:%d\n", i + 'a', low[i]); + } +} diff --git a/semester2/pset3/2-write.c b/semester2/pset3/2-write.c new file mode 100644 index 0000000..a245637 --- /dev/null +++ b/semester2/pset3/2-write.c @@ -0,0 +1,71 @@ +#include + +int main(void) { + FILE *fp = fopen("dict.dic", "rb"); + + char a, + aa[5]; //注意这里数组aa为正常使用的字符串,所以会包含字符'\0',它不需要输出 + short b, bb[5]; + int c, cc[5]; + long d, dd[5]; + long long e, ee[5]; + float g, gg[5]; + double h, hh[5]; + + int n; + scanf("%d", &n); + + for (int i = 0; i < n; i++) { + fread(&a, sizeof(a), 1, fp); + fread(&b, sizeof(b), 1, fp); + fread(&c, sizeof(c), 1, fp); + fread(&d, sizeof(d), 1, fp); + fread(&e, sizeof(e), 1, fp); + fread(&g, sizeof(g), 1, fp); + fread(&h, sizeof(h), 1, fp); + fread(aa, sizeof(a), 5, fp); + fread(bb, sizeof(b), 5, fp); + fread(cc, sizeof(c), 5, fp); + fread(dd, sizeof(d), 5, fp); + fread(ee, sizeof(e), 5, fp); + fread(gg, sizeof(g), 5, fp); + fread(hh, sizeof(h), 5, fp); + } + + printf("%c\n", a); + printf("%i\n", b); + printf("%d\n", c); + printf("%ld\n", d); + printf("%lld\n", e); + printf("%f\n", g); + printf("%lf\n", h); + + printf("%s\n", aa); + for (int i = 0; i < 4; i++) { + printf("%i ", bb[i]); + } + printf("%i\n", bb[4]); + for (int i = 0; i < 4; i++) { + printf("%i ", cc[i]); + } + printf("%i\n", cc[4]); + for (int i = 0; i < 4; i++) { + printf("%li ", dd[i]); + } + printf("%li\n", dd[4]); + for (int i = 0; i < 4; i++) { + printf("%lli ", ee[i]); + } + printf("%lli\n", ee[4]); + for (int i = 0; i < 4; i++) { + printf("%f ", gg[i]); + } + printf("%f\n", gg[4]); + for (int i = 0; i < 4; i++) { + printf("%lf ", hh[i]); + } + printf("%lf\n", hh[4]); + + fclose(fp); + return 0; +} diff --git a/semester2/pset3/3-readFile.c b/semester2/pset3/3-readFile.c new file mode 100644 index 0000000..0942e1f --- /dev/null +++ b/semester2/pset3/3-readFile.c @@ -0,0 +1,26 @@ +#include +#include +#include + +int main(void) { + FILE *fp = fopen("dict.dic", "r"); + + int a; + char b[16]; // bool + double c; + char d[4096]; + + int n; + scanf("%d", &n); + + for (int i = 0; i < n; i++) { + fscanf(fp, "%i%s%lf%s", &a, b, &c, d); + } + + printf("%i\n", a); + printf("%s\n", b); + printf("%lf\n", c); + printf("%s\n", d); + + return 0; +}