美文网首页c/c++C语言基础
C语言基础---文件格式化读写和大数据排序

C语言基础---文件格式化读写和大数据排序

作者: ZebraWei | 来源:发表于2018-07-18 21:05 被阅读5次

版权声明:本文为小斑马伟原创文章,转载请注明出处!
一、格式化读文件
int fscanf(FILE* stream,const char*format,...);
功能:从stream指定的文件读取字符串,病根据参数format字符串转换并格式化数据。
参数: stream 已经打开的文件 format:字符串格式,用法和scanf()一样
返回值:成功:参数数目,成功转换的值的个数 失败:-1
读取字符串:

FILE* fp = fopen("D://a.txt", "r");
if (!fp) {
    return -1;
}

char* p = (char*)malloc(sizeof(char)* 100);
//遇到换行就停止
fscanf(fp, "%s", p);
printf("%s", p);
printf("\n");

fscanf(fp, "%s", p);
printf("%s", p);
printf("\n");

fscanf(fp, "%s", p);
printf("%s", p);
printf("\n");

fscanf(fp, "%s", p);
printf("%s", p);
printf("\n");

free(p);
fclose(fp);
return 0;

格式化读取运算符:

FILE* fp = fopen("D:/b.txt", "r");
if (!fp)
    return -1;
int a, b, c;

fscanf(fp, "%d+%d=%d", &a, &b, &c);

printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
fclose(fp);
return 0;

二、格式化写文件
int fprintf(FILE* stream,const char* format,...);
功能:根据参数format字符串来转换并格式化数据,然后将结果输出到stream指定的文件中,指定出现字符串结束符'\0'为止
参数: stream 已经打开的文件 format 字符串格式 用法和printf()一样
返回值:成功:实际写入文件的字符个数 失败: -1

int main(void) {
FILE* fp = fopen("d:/b.txt", "w");
if (!fp)
    return -1;

char ch[] = "hello world";
//格式化写入 会覆盖以前文本内容
fprintf(fp, "%s", ch);
fclose(fp);
return 0;
}

int main(void) {
FILE* fp = fopen("d:/b.txt", "w");
if (!fp)
    return -1;

int a = 10;
//格式化写入 会覆盖以前文本内容
//fprintf(fp, "%05d", a);
fprintf(fp, "%05x", a);
fclose(fp);
return 0;
}

四则运算格式化的读写操作:

enum opt {
add,sub,mlt,dive
}op;

int main() {

srand((size_t)time(NULL));
FILE* fp = fopen("D://四则运算.txt", "w");
if (!fp) {
    return -1;
}

int a, b;
char c;//+ - * /
//char* p = (char*)malloc(sizeof(char)* 20);
for (int i = 0; i < 100; i++) {
    a = rand() % 10 + 1;
    b = rand() % 10 + 1;

    switch (rand()%4)
    {
    case add: c = '+';
        break;
    case sub: c = '-';
        break;
    case mlt: c = '*';
        break;
    case dive: c = '/';
        break;
    default:
        break;
    }
    //memset(p, 0, 20);
    //printf(p, "%d%c%d=\n", a, c, b);
    //fputs(p, fp);
    //格式化写入

    fprintf(fp, "%d%c%d=\n", a, c, b);
}

fclose(fp);

system("pause");
return 1;

}

int main(void) {
FILE* fp1 = fopen("D:/四则运算.txt", "r");
FILE* fp2 = fopen("D:/四则运算结果.txt", "w");
if (!fp1 || !fp2) {
    printf("打开文件失败\n");
    return -1;
}
int a,b,sum;
char c;
//char* p = (char*)malloc(sizeof(char)*20);
for (int i = 0; i < 100; i++) {
    //memset(p, 0, 20);
    //fgets(p,20,fp1);
    //格式化读出
    fscanf(fp1, "%d%c%d=\n", &a, &c, &b);

    //sscanf(p, "%d%c%d=\n", &a, &c, &b);
    switch (c) {
    case '+':sum = a + b; break;
    case '-':sum = a - b; break;
    case '*':sum = a * b; break;
    case '/':sum = a / b; break;
    }
//  /memset(p, 0, 20);
    //sprintf(p, "%d%c%d = %d\n", a, c, b, sum);
    //fputs(p, fp2);
    fprintf(fp2, "%d%c%d=\n", a, c, b);
}

//free(p);
fclose(fp1);
fclose(fp2);

return 0;

}

三、冒泡排序法大文件的读写

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define SIZE 10000

int main(void) {
srand((size_t)time(NULL));
FILE* fp = fopen("D://数据.txt", "w");
if (!fp)
    return -1;
for (int i = 0; i < 1000; i++) {
    fprintf(fp, "%d\n", rand() % 256);
}
fclose(fp);
return 0;
}

int main() {
FILE* fp1 = fopen("D:/数据.txt", "r");
FILE* fp2 = fopen("D:/数据冒泡版排序.txt", "w");

if (!fp1 || !fp2)
    return -1;
//冒泡版
int* arr = (int*)malloc(sizeof(int)* 1000);

for (int i = 0; i < SIZE; i++) {
    fscanf(fp1, "%d\n", &arr[i]);
}

BubbleSort(arr, SIZE);

for (int i = 0; i < SIZE; i++) {
    fscanf(fp2, "%d\n", arr[i]);
}

free(arr);
fclose(fp1);
fclose(fp2);

return 0;
}
int count = 0;
void BubbleSort(int* src, int len) {
for (int i = 0; i < len - 1; i++) {
    for (int j = 0; j < len - 1 - i; j++) {
        count++;
        if (src[j] > src[j + 1]) {
            int temp = src[j];
            src[j] = src[j + 1];
            src[j + 1] = temp;
        }
    }
}

printf("%d\n", count);
}

四、快速插入排序法大文件的读写

FILE* fp1 = fopen("D:/数据.txt", "r");
FILE* fp2 = fopen("D:/数据插入版排序.txt", "w");
if (!fp1 || !fp2)
    return -1;

int* arr = (int*)malloc(sizeof(int)* 256);

memset(arr, 0, sizeof(int)* 256);

for (int i = 0; i < 1000; i++) {
    int value;
    fscanf(fp1, "%d\n", &value);
    arr[value]++;//将数据的个数放到对应的小标里面
}

for (int i = 0; i < 256; i++) {
    for (int j = 0; j < arr[i]; j++) {
        fprintf(fp2, "%d\n", i);
    }
}
free(arr);
fclose(fp1);
fclose(fp2);

return 0;

相关文章

  • C语言基础---文件格式化读写和大数据排序

    版权声明:本文为小斑马伟原创文章,转载请注明出处!一、格式化读文件int fscanf(FILE* stream,...

  • Python文件操作

    前言 文件的读写操作是一门编程开发语言的基础,Python内置了读写文件的函数,用法和C是兼容的。 我们先解释一下...

  • C语言读写文件

    C语言文件读写### 标准文件读写 非标准文件读写 标准文件读写 头文件 include 打开文件 函数原型:FI...

  • C语言基础---文件读写概念

    **版权声明:本文为小斑马伟原创文章,转载请注明出处!一、文件分类按文件的逻辑结构:1.记录文件:由具有一定结构的...

  • C语言_文件

    @(C语言) [toc] 读文件 写文件 读写二进制文件

  • C语言读写文件

    从键盘输入字符后,写入到磁盘文件datafile1.txt中 读出磁盘文件datafile.txt中的内容,将它们...

  • C语言读写文件

    fread函数和fwrite函数 1.函数功能 用来读写一个数据块。 2.一般调用形式 fread(buffer,...

  • C语言读写文件

    C读写文件 使用 fopen(文件名,访问模式) 函数来打开文件,一般有getc/putc , fgets/fpu...

  • C语言基础---文件块的读写

    版权声明:本文为小斑马伟原创文章,转载请注明出处!一、文件块写文件size_t fwrite(const void...

  • 2017.3.22

    今天学了c++的文件操作,打开文件和关闭文件和C语言差不多,读出数据和读入数据就有点绕了,ifstream读出数据...

网友评论

    本文标题:C语言基础---文件格式化读写和大数据排序

    本文链接:https://www.haomeiwen.com/subject/ozuapftx.html