zoukankan      html  css  js  c++  java
  • 第一次作业

    要求0 作业要求:

    https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110

    要求一

    git地址:【https://git.coding.net/hanyh343/wf.git

     

    要求二

    psp阶段表格

    任务

    预计花费时间

    (分钟)

    实际花费时间

    (分钟)

    储备知识,查询资料

    180

    220

    编写、测试功能一

    文件读取

    程序编写

    统计单词数量及输出

    30

    5

    20

    5

    60

    10

    45

    5

    编写、测试功能二

    在功能一的基础上修改需求

    测试功能二,并修改错误

    55

    30

    25

    100

    60

    40

    编写、测试功能三

    需求分析及修改

    测试功能三

    25

    15

    10

    45

    25

    20

    分析预计时间与实际时间差距

    1. 没有考虑到自己的技术在实际操作中会遇到一些棘手的问题,比如一些bug的修改
    2. 主要还是对C++C#java的掌握的不熟练,特别是一些函数、包的运用,有些函数不

    常用,所以运用起来不是很熟练

    1. 没有把作业要求理解透彻,学好语文很重要

    要求三:

    1.解题思路描述

    首先看到这个作业的时候我的脑子是毫无头绪的,需要花费时间缕清思路。然后我在博客上看了一些关于coding.netgit的使用方法,之前未曾接触过,git的使用、仓库的建立等理解起来有些困难,同时也在图书馆借阅了一些C++等编程语言用书,大一的时候虽然接触过,但印象并不是很深。而且也不太清楚本地和远程仓库的关系,代码应该在哪里编写及修改,后来看了一些资料和问比较清楚的同学才有了一些头绪,而且作业涉及到文件,基础薄弱的我感觉会很难编写。虽然看了一些关于文件的基础知识,但是实际完成一个任务还是很困难的,本来以为三个功能是有关联的,实现一个其他几个也就很容易了,低估了它的难度,高估了我的智商。

    参考博文地址:【http://www.cnblogs.com/life-for-test/p/6284041.html

    2.重点代码展示

    文本的读入通常使用fopen、fread、fclose内置函数接口,但是读入的文本需要存储在字符串数组中。另外C++标准库实际上有定义类似流输入输出iostream库类似的文本流读入操作。fstream头文件中有定义文本流操作的类。我们只需要实例化一个fstream类对象,通过类对象完成复杂的文本处理工作,并且获取文本可以保存在string字符串类对象中。 

      #include<fstream>
        #include<string>
        string strFile, tmp;
        ifstream file("wf.txt");      //读取当前文件夹下wf.txt文件
        while(getline(file, strFile))//直到文件结尾,依次逐行读入文本
        {
            strFile.append(tmp);    //每次读入一行附加到strFile结尾
            tmp.clear();            //记得清除,否则上一次读入比这次文本长,不会完全覆盖而出错
        }   

    2.排除符号位影响,将整个文件的符号位都去掉或者替换成空格。判断哪个字符是否是符号位,主要借助了标准库cctype中的ispunct()函数接口,如果某个字符是符号位(‘,’,’.’ ,’!’等等)就返回True。

      #include<cctype>
        #include<string>
        for (int i = 0; i<strFile.length(); i++)
        {
            if (ispunct(strFile[i]))   
                strFile[i] = ' '; //符号位替换成为空格
        }

    3.当一大串文本句子存储在了string对象中,处理单词就需要借助字符串流处理的功能。类似cin和cout,因为经过符号位去除操作后,所有单词是相互空格隔开的,只需要遇到空格读入一个单词即可。sstream头文件定义的stringstream类可以依次流操作读出或者读入一个单词,直到句子结束。

     #include<sstream> 
        stringstream ss(strFile); //先将文本句子载入流中,类似控制端键盘输入一段话
        string strTmp;
        while (ss >> strTmp)      //依次从流中读入每个单词
        {
         //###  每个word处理程序处
        }    


      4.单词的统计是我们程序的重点,此处使用的方法是关联容器由于基于哈希表的unordered_map查询和插入的时间复杂度是常数级,比基于红黑树的map对数级还要快,所以这里使用键值对记录的unordered_map数据结构。其中键对应单词string,值对应出现的频率int。

    #include<string>
    #include<iterator>
    #include<unordered_map>
    
    using namespace std;
    
    unordered_map<string, int> strMap;  //保存的结果
    void countWord(stringstream &ss)
    {
        //依次读入单词
        string strTmp;
        while (ss >> strTmp)
        {
            unordered_map<string, int>::iterator it = strMap.find(strTmp);
            if (it == strMap.end()) //strMap中如果不存在当前单词则插入一个新键值对,出现频率为1
            {
                strMap.insert(unordered_map<string, int>::value_type(strTmp, 1));
            }
            else                   //如果存在则出现频率+1
                strMap[strTmp]++;
        }
    }
    #include<iostream>
    #include<sstream>
    #include<fstream>
    #include<string>
    #include<iterator>
    #include<cctype>
    #include<unordered_map>
    using namespace std;
    
    unordered_map<string, int> strMap;  //保存的结果
    /***从字符串流中依次读入单词记录出现频率***/
    void countWord(stringstream &ss)
    {
        //依次读入单词
        string strTmp;
        while (ss >> strTmp)
        {
            unordered_map<string, int>::iterator it = strMap.find(strTmp);
            if (it == strMap.end())
            {
                strMap.insert(unordered_map<string, int>::value_type(strTmp, 1));
            }
            else
                strMap[strTmp]++;
        }
    }
    
    int main()
    {
        //读入文档
        string strFile, tmp;
        fstream file("wf.txt");
        while(getline(file, strFile))  //!file.eof()
        {
            strFile.append(tmp);
            tmp.clear();
        }   
        //去除符号
        for (int i = 0; i<strFile.length(); i++)
        {
            if (ispunct(strFile[i]))   
                strFile[i] = ' ';
        }
        //统计字符
        stringstream ss(strFile);
        countWord(ss);    
        //打印结果
        unordered_map<string,int>::const_iterator it;
        for (it = strMap.begin(); it != strMap.end(); ++it)
            cout << it->first << "=" << it->second << endl;
        cout << endl;
        return 0;
    }

    收获

     整个作业下来就是自己的基础太差,重点代码还是靠网络搜索,掌握一门语言靠几个小时几天是远远不够的,查阅几个小时的资料只能懂这个知识点的浅层意思,自己练的代码量太少,缺乏锻炼,通过这次作业明白技术流也是要靠持之以恒的训练出来的,以后会更加努力的鸭,加油鸭!

  • 相关阅读:
    写了一个分页控件。
    职业规划
    程序员该做的事
    做就做最优秀的员工
    Tomcat+JSP经典配置实例
    2005年11月26日8点50左右,南昌地震。
    如何添加一个自定义的columnstyles 到设计器中,以便在设计时直接使用他们?
    Oracle 的入门心得【强烈推荐】
    如何随机显示记录条数的15% ?
    重写DataGrid的DataGridBoolColumn,添加bool值改变事件。
  • 原文地址:https://www.cnblogs.com/hanyh343/p/9683837.html
Copyright © 2011-2022 走看看