默写单词cpp(初学者版本)

笔摔坏了

在一个阳光明媚的早晨,我愉快的奋笔疾书,抄写默写着单词“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;
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值