c++练手项目:英语单词拼写测试程序

代码比较简单。基本的思路是从文本文件中按行读取数据,数据结构为“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;

}

运行效果:

从最初的想法,到慢慢的每一步每一个函数的学习到实现,终于算是初步完成了。后面可能会继续完善稳定性(其实只要知道源码自己用,根本没什么稳定性问题)。还有想让它更好看一点,目前的想法就是让输出的字体颜色不一样,比如拼写正确就输出绿色字体,错误就输出红色字体。还有就是检测正确率,随机测试,能随时停止测试等等。

参考前面写的文章:

c++实现按行读取文本文件

c++查询特定字符串位置

c++输出中文乱码解决方案

posted @ 2019-03-16 17:41  roadwide  阅读(555)  评论(0编辑  收藏  举报