代码比较简单。基本的思路是从文本文件中按行读取数据,数据结构为“hello-你好”。前面是英语,后面是中文,中间用“-”连接。程序通过查找连词符的位置来分割中文和英文。再通过和用户输入的单词进行比较判断是否正确。
期间发现了另一个问题。起初是通过cin来获取用户输入的内容,刚开始看起来可以用。但当我拿课本上的单词开始实战的时候,发现cin没法分割空格(会把空格前后的东西看作是两次输入),也就是说没法测试短语。可以通过getline函数解决。之前学的getline是第一个参数是一个ifstream的读取对象,在这看来第一个参数还可以是用户输入的内容。第二个参数是要赋值的变量。
#include <fstream>//ifstream读文件,ofstream写文件,fstream读写文件 #include <string>//文本对象,储存读取的内容 #include <iostream>//屏幕输出cout,输入cin #include <cstdlib>//调用system("pause"); #include <windows.h>//用于函数SetConsoleOutputCP(65001);更改cmd编码为utf8 using namespace std; int main() { SetConsoleOutputCP(65001); ifstream in("1.txt"); string line; int mid; string english; string chinese; if(in) // 有该文件 { while (getline (in, line)) // line中不包括每行的换行符 { string userinput; mid=line.find("-"); english=line.substr(0,mid); chinese=line.substr(mid+1,line.max_size()); cout<<"the chinese word is "<<chinese<<endl; getline(cin,userinput); if(english.compare(userinput)==0) { cout<<"your input is right"<<endl; }else { cout<<"your input is wrong"<<endl; } } } else // 没有该文件 { cout <<"no such file" << endl; } system("pause"); return 0; }
运行效果:
从最初的想法,到慢慢的每一步每一个函数的学习到实现,终于算是初步完成了。后面可能会继续完善稳定性(其实只要知道源码自己用,根本没什么稳定性问题)。还有想让它更好看一点,目前的想法就是让输出的字体颜色不一样,比如拼写正确就输出绿色字体,错误就输出红色字体。还有就是检测正确率,随机测试,能随时停止测试等等。
参考前面写的文章: