《C++语言基础》实践项目——文本文件及应用

简介: 返回:贺老师课程教学链接本周项目中用到的数据文件,请在这里下载:点击打开链接【项目1 - 小玩文件】(1)下面程序的功能是统计文本文件abc.txt中的字符个数,请填空将程序补充完整。#include <iostream>#include <cstdlib>#include _____________ // (1)using namespace std;i

返回:贺老师课程教学链接


本周项目中用到的数据文件,请在这里下载:点击打开链接
【项目1 - 小玩文件】
(1)下面程序的功能是统计文本文件abc.txt中的字符个数,请填空将程序补充完整。

#include <iostream>
#include <cstdlib>
#include _____________ // (1)
using namespace std;
int main()
{
    fstream file;
    file.open("abc.txt", _________); // (2)
    if(!file) {
        cout<<"abc.txt can’t open."<<endl;
        exit(1);
    }
    char ch;
    int i=0;
    while( _____________) // (3)
    {
        file.get(ch);
         _____________; // (4)
    }
    cout<<"Character: "<<i<<endl;
    file._____________;// (5)
    return 0;
}

(2)下面程序的功能是将文本文件abc.txt中的所有行加上行号后写到newabc.txt文件中,请填空将程序补充完整。
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
    fstream outfile,infile;
    infile.open("abc.txt",_________); // (1)
    if(!infile) {
        cout<<"Can’t open the file."<<endl;
        abort();
    }
    outfile.open("newabc.txt",______);//(2)
    if(!outfile) {
        cout<<"Can’t open the file."<<endl;
        abort();
    }
    char buf[80];
    int i=1;
    while(____________) // (3)
    {
        infile.____________; // (4)
        outfile<<________<<": "<<buf<<endl; //(5)
    }
    infile.close();
    outfile.close();
    return 0;
}
(3)用键盘输入文件名,统计输出文件中每个字母、数字字符出现的次数;
(4)用键盘输入文件名,统计输出类似下面的数据(每个汉字2字节,每字节最高位为1)。

提示1:只在DOS窗口中输出即可;
提示2:不必完成所有统计,有体验即可;
提示3:上述统计结果,来自文件aboutcpp.txt。

[参考解答]

【项目2-用文件保存的学生名单】
文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分数据成员。

//定义学生类
class Student{
public:
    //声明必要的成员函数
private:
    string name;
    double cpp;
    double math;
    double english;
    double total;
    static int stu_num;  //学生人数,处理为类的静态成员合适
    static double total_sum; //学生总分和
};

(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
int main( )
{
    Student stud[200],t; //stud[200]为保存数据的对象数组
    string sname;
    double total_avg;
    int i=0;
    //从文件score.dat中读入数据,保存到对象数组中


    //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中
    return 0;
}
讨论:学生人数和总分的另外一种解决方法是用全局变量。但这两种信息与学生有关,是学生类的“属性”,成为学生类的数据成员合适;这两种信息由学生整体决定,用作静态数据成员合适。如不理解这样设计的理由,复习课程前面的相关内容。

[参考解答]


【项目3-OOP版电子词典】
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
(1)编程序,由用户输入英文词,显示词性和中文释义。
提示1:如果要用OOP完成这个词典(当然也可以用OO方法实现),可以定义一个Word类表示一个词条,其中的数据成员string english; 表示英文单词,string chinese;表示对应中文意思,string word_class;表示该词的词性;还可以定义一个Dictionary类,用来表示词典,其中Word words[8000]成员表示词典中的词条,int wordsNum;表示词典中的词条数,在构造函数中从文件读入词条,而专门增加一个成员函数用于查单词。
提示2:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
提示3:这样的项目,最好用多文件的形式组织

(2)(选做)使用这个词典,读入一篇文章,输出对其中的所词的解释。例如,对aboutcpp.txt,输出如下左图结果所示(也可以看到其中待改进的地方)。

(3)(选做)试用wxwidgets或MFC,做一个窗口版的电子词典,如上右图所示:

[参考解答]


【项目4 - 处理C++源代码的程序】
  在CodeBlocks等IDE中都提供了代码格式整理的功能。完成这种功能的程序,操作的数据是用C++写的源代码文件。C++源文件是一种文本文件,可以通过程序进行操作。
集成开发环境(IDE)对对程序进行编译,操作的“数据”是源程序。编译中,要对源程序进行词法检查和语法检查,后续还要进行目标代码生成、代码优化等工作。相关的技术将在《编译原理》课中学习。这些技术可以用在很多领域,当然也能够让我们对于编程语言有更深的了解。
  本项目将以C++源程序为操作对象,完成对源程序的一系列处理。各功能可以分别编制一个程序实现(建议用这种简单的方案),也可以将其集成在一起(向着自己做出IDE努力)。
(1)读入一个C++程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个main()函数”;
提示1:简单处理,可以只比较判断”main()”,考虑实际上的各种可能,main后面的括号中有任意多个空格及void的都应该算在内。建议按最简单的情形处理。
提示2:建议设计一个函数,将读到的代码与字符串”main()”进行比较。函数用于判断s1是否“包含”在读入的一行s2中,调用时,形参s1处的实参用”main()”即可,这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。

(2)读入一个C++程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(3)读入一个C++程序,输入m、n两个数字,从第m行起的n行代码将作为注释使用(即在这些行前面加上”//”),新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号。
文字处理领域能做的工作也就此向大家敞开大门,下面一些功能作为选做内容,请有余力的同学参考,想。
(4)(选做)读入一个C++程序,将程序中的所有注释(包括//形式和/*...*/形式的)删除,新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(5)(选做)读入一个C++程序,使程序中:(1)所有左花括号“{”和右花括号“}”都单独占一行;(2)每个语句单独占一行;(3)各行采用统一的缩格排放(每遇一个“{”,其下一行的程序,在第一个有意义的符号前的空格数增加4(也可以是增加一个’\t’),每遇一个“}”,其下一行的程序,在第一个有意义的符号前的空格数减少4(也可以是一个’\t’))。
(6)(选做)基于(5),用wxWidgets设计界面,在对话框中选择要处理的源文件名,并指定目标文件名后进行处理。如在左图中点击按钮“…”后,会利用“打开文件对话框”(wxFileDialog)窗口选择文件。 


[参考解答]



目录
相关文章
|
16天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
19 2
|
27天前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
46 3
|
28天前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
41 0
|
12天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
37 6
|
7天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
15天前
|
存储 C++ iOS开发
C++文件操作(文本文件的读写+二进制文件的读写)
C++文件操作(文本文件的读写+二进制文件的读写)
|
16天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
12 2
|
22天前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0
|
27天前
|
设计模式 算法 中间件
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
113 1
|
28天前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
70 2

热门文章

最新文章

相关实验场景

更多