笔摔坏了
在一个阳光明媚的早晨,我愉快的奋笔疾书,抄写默写着单词“abandon”,喝水的时候,水性笔顺着桌子掉落到地上,我心里一紧,颤颤巍巍的弯腰捡起来,在纸上写个字,发现果然笔尖果然摔坏了。没办法,只能掏出C++primeplus,复习一下什么是类,然后运用脑袋里为数不多的知识写了一个默写单词cpp。
- 编译环境:Visual Studio 2022
提供两个路径:
直接使用版😋
仔细学习版😋
===============
1.直接使用版😋(文件+使用规范)
(1)文件
头文件 word.h
#include<iostream>
#include<new>
#include<stdio.h>
#include<cstring>
#include <stdlib.h>
#include<time.h>
#pragma warning (disable:4996)
using namespace std;
typedef struct Word //存储单词的类型
{
char str_EN[20]; //英文的记录
char str_CH[10][20]; //一个英文可能有很多中文意思
int CHcount; //中文翻译的个数,比如tone的英文意思有色调也有声调
Word()
{
memset(str_EN, 0, sizeof str_EN);
memset(str_CH, 0, sizeof str_CH);
CHcount = 0;
}
}Word;
typedef struct mWord //记录默写错误的单词
{
int mistake[100];
int len; //默写错误单词的个数
mWord()
{
memset(mistake, 0, sizeof mistake);
len = 0;
}
}mWord;
class WordWork //主体类
{
private: //私有成员(单词指针,单词个数)
Word* pp;
mWord misword; //默写错误的单词
int length; //单词个数
public:
WordWork() //初始化成员,为什么misword不需要初始化?实际上执行“mWord misword”这句话的时候就初始化了,mWord有自己的构造函数
{
pp = NULL;
length = 0;
};
bool Muen(); //菜单
bool Dynamic_GetSpace(FILE* fp);
bool Get_inCPP(); //将单词从文件放入数组
bool test(); //测试单词
bool testMis(); //测试错误单词
bool Wordcmp(char* w, int p_c); //判断是否默写正确
int CmpCH(const string s, int p_c); //判断中文意思对没对
int Get_point(); //打分
void Print(); //打印所有单词
void PrintMis(); //打印错误的单词
~WordWork() //析构函数
{
delete[]pp;
}
};
bool WordWork::Dynamic_GetSpace(FILE* fp) //动态开辟数组
{
char temp[50];
while (fgets(temp, 50, fp) != NULL) //先一行一行读取单词,目的不是将单词提取出来,目的是看有多少单词,然后开辟数组
{
length++;
}
pp = new Word[length];
for (int i = 0; i < length; i++) //初始化单词,此时单词还没有读入,单纯开辟空间,所有待会文件指针fp需要重新指向文件开头
{
memset(pp[i].str_CH, 0, sizeof pp[i].str_CH);
memset(pp[i].str_EN, 0, sizeof pp[i].str_EN);
}
return true;
}
int WordWork::CmpCH(const string s, int p_c) //s是中文串,p_c是pp的下标
{
int rightCount = 0;
int i, j;
for (i = 0; i < pp[p_c].CHcount; i++)//因为s只是一个中文串,即一个中文意思,那么就需要对pp对应下标的所有中文意思都进行一个判断,有一个正确就正确
{
for (j = 0; j < s.length(); j++)
{
if (s[j] != pp[p_c].str_CH[i][j])break;