SCAU高级语言程序设计--实验12 文件操作(2)

SCAU高级语言程序设计--实验12 文件操作(2)

二、堂下练习

1、文本文件操作---读取与选择显示

题目: 在当前目录中存在文件名为"case1.in"的文本文件,现要求打开该文件,读出里面的所有字符,只将其中的数字字符按先后顺序显示在屏幕上。 (如case1.in内容如下) 13 cats and 22 bikes (在屏幕上输出结果如下) 1322
#include "stdio.h" 
main() 

    FILE *fp; 
    char ch; 

    if((_______________________)==NULL) 
        return 0; 
    while(_______________________) 
    { 
        _______________________ 
    } 
    fclose(fp); 

思路:打开文件->读取文件内容->判断是否为数字->若是数字就打印出来->关闭文件

#include<stdio.h>
main(){
    FILE *fp;
    char ch;
    if((fp=fopen("case1.in","r"))==NULL)//打开文件
        return 0;
    while((ch=fgetc(fp))!=EOF){//循环读取文件字符内容
        if(ch>='0'&&ch<='9')//判断是否为数字
            putchar(ch);//若是数字,打印出来
    }
    fclose(fp);//关闭文件
}

2、文本文件操作---单词的排序

题目:在当前目录有文件“case1.in”,文件里存放有多个(总个数不超过10000个)英文单词(每个英文单词不会超过10个字文字符), 每行一个,单词未排序。现要求,将文件中的所有单词按字典顺序排序,然后将排序好的单词写入新建的文件answer.txt中(注:文件存放于当前目录)。 请完成程序,实现该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)

(如case1.in文件中原内容如下)
hello
bye
yes
(程序执行后,在文件answer.txt中内容如下)
bye
hello
yes


#include "stdio.h" 
#include "string.h" 

main() 

_______________________ 

思路:

1、首先,把data1.in文件中的所有单词都读取在二维数组中。

(每一行就是1个单词,str数组总共可以读10000个数组。注意列要设置为11,因为考虑到最后的‘\0’字符。)

2、读取字符串的函数为fscanf(),和scanf()的参数类似,只是fscanf()多了第一个参数指定读哪个文件。

(fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束,而且只是读单个字符。)

(fscanf的返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。所以我们这里判断有单词返回值肯定>0

3、单词排序就和数字由小到大排序一样,这里判断的函数用了strcmp()函数。这个函数比较两个字符串,从左到右依次比较。若str1==str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

例如,str1=hello,str2=apple,因为第一个字符‘h’>'a',所以str1>str2,返回正数。又例如,str1=hello,str2=heaao,因为第三个字符‘l’>'a',所以str1>str2,返回正数。

这样我们逐个字符串比较,就可以字母顺序把数组重新排序,即使遇到前几个字符有相同的单词也能排序。

4、最后循环把新数组写入新文件里面。用的函数为fprintf(),函数类似于printf(),只是多了第一个参数指定写入哪个文件。

#include<stdio.h>
#include<string.h>
main(){
    FILE *fp1,*fp2;
    char str[10000][11],str1[11];
    int n=0,i,j;
    /*打开文件*/
    if((fp1=fopen("data1.in","r"))==NULL)//以读的方式打开文件1,
        return 0;
    if((fp2=fopen("answer.txt","w"))==NULL)//以写得方式打开文件2
        return 0;
    /*读取每一个单词到数组*/
    while((fscanf(fp1,"%s",str[n]))>0)//循环读取文件字符串内容到数组
        n++;
    /*单词的排序*/
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++){
            if(strcmp(str[i],str[j])>0){//判断两个字符是否一致
                //两个数组交换
                strcpy(str1,str[i]);
                strcpy(str[i],str[j]);
                strcpy(str[j],str1);
            }     
        }
    }
    /*写入文件*/    
    for(i=0;i<n;i++){
        fprintf(fp2,"%s",str[i]);
    }
    /*关闭文件*/
    fclose(fp1);
    fclose(fp2);
}
SCAU综合实验课程中的文件操作与字符处理是一门非常重要的课程,它教授了如何使用计算机来操作文件以及对文件中的字符进行处理。 文件操作是指使用计算机来创建、打开、读取、写入、修改和关闭文件的过程。在实验中,我们学习了如何使用C++编程语言来实现这些文件操作。通过实践,我们可以掌握文件的基本操作,比如创建文件、打开已存在的文件、从文件中读取数据、向文件写入数据和关闭文件等等。这些操作对于日常的文件处理工作非常有用。 字符处理是指对文件中的字符进行操作和处理的过程。我们学习了如何使用C++语言中的字符串类和字符数组来对字符进行处理。通过实验,我们可以掌握字符串的创建、拼接、截取、替换和转换等操作。这些操作可以帮助我们更好地处理文件中的文本数据,比如查找特定的字符、计算字符串的长度、在字符串中查找子字符串等等。 此外,我们还学习了一些常见的文件操作和字符处理的应用,比如统计一个文件中的字符数、单词数和行数,将一个文件中的大写字母转换为小写字母,将一个文件中的所有空格替换为换行符等等。这些应用可以帮助我们更好地理解文件操作和字符处理的实际应用场景,并提高我们的实际操作能力。 综上所述,SCAU综合实验中的文件操作与字符处理课程是非常实用和重要的一门课程,它教授了我们使用计算机来操作文件和处理字符的技能和知识。通过学习这门课程,我们可以提高我们的实际操作能力,为以后的工作做好准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值