c/c++C语言基础

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

2018-07-18  本文已影响5人  ZebraWei

版权声明:本文为小斑马伟原创文章,转载请注明出处!
一、格式化读文件
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;
上一篇 下一篇

猜你喜欢

热点阅读