一、前言

不知不觉已经大三上学期了,可作为一个计算机狗还没有考过CCF-CSP。因平时学习内容主要与安全方面相关,对于此类算法类的考核并没有太多的准备,故打算开始刷题复习算法和数据结构,准备CCF认证。在这里选择杭电的OJ作为准备此次CCF备考的练习题目。

虽然平时在学校里使用java语言较多,但考虑到语言运行速度和语法及编译器的熟练程度,以及网络上对于OJ题目的解法大多为c/c++编写,故此次打算报名c/c++作为编写语言,并使用CCF官方给出的devcpp作为编译环境。因此笔者在解题过程中可能会较多使用STL,并对其功能进行一些讲解。同时,笔者会尽量采用较为基础、常见的算法解题,可能会在额外时间和额外内存上无法做到完美,适合与算法初学者、基础者交流。

由于杭电OJ的题目较多,笔者会对其中部分题目进行个人分析和源代码的展示,并以题目类型进行分类。仅供学习和交流。

二、题解

2072、单词数

2072、单词数

此题的思路很简单,我们接收一个字符串,将其中的单词逐个提取出来;然后构造一个结构存储单词字符串,此结构初始时为空,每次将逐个取出的单词与此结构中的所有单词比较,如果此单词已经存储,继续提取下一个单词;如果还未存储,那么存储此单词在结构中,单词计数器加一。

此题有以下几个需要注意的地方:

1、输入字符串的接收。如果我们仅使用cin来输入字符串,那么遇到空格时,一次输入就会结束,无法接收完整的字符串。故在此题中需要使用以下:

getline(cin,string s),可以输入时接收空格在字符串中,遇到回车符结束一次输入。包含在<string>头文件中。

2、存储结构的选则。因为我们一开始不知道一句话会有多少个单词,也不知道单词数的上限,所以选择可变长结构vector来存储字符串。因此,我们在最后计算单词个数时,既可以使用自定义的计数器count,也可以直接使用函数vector.size()。

3、此题可能会出现在句子开头、结尾出现空格以及两个单词中间出现多个空格的情况,要在程序中予以考虑。

笔者源代码如下:

#include<iostream>
#include<vector>
#include<string.h>
#include<string>
using namespace std;int main(void){string s;while(getline(cin,s)){int count = 0;if(s=="#") break;vector<string>vec;   //用于存放已经统计过的字符串int len = s.length();int begin = 0;       //本次截取的头部for(int i=0;i<len;i++){if(s[i]==' '||i==len-1){string now;if(s[i]==' ') now = s.substr(begin,i-begin);else if(i==len-1) now = s.substr(begin,len-begin);int j;for(j=0;j<count;j++){if(now==vec[j]) break;}if(j==count&&now!=""){    //防止开头、结尾有空格同时中间有多个空格的情况vec.push_back(now);   //如果这个单词还没有被统计过,则放入容器中count++;}begin = i + 1;  //更新截取起始位置}}cout<<count<<endl;vec.clear();}return 0;
}

-----------------------------------------待更新----------------------------------------------

c++ substr截取中间部分字符串_杭电OJ 字符串处理类部分题解相关推荐

  1. c++怎么输入带有空格的字符串_杭电OJ 字符串处理类部分题解

    一.前言 不知不觉已经大三上学期了,可作为一个计算机狗还没有考过CCF-CSP.因平时学习内容主要与安全方面相关,对于此类算法类的考核并没有太多的准备,故打算开始刷题复习算法和数据结构,准备CCF认证 ...

  2. 田忌赛马贪心算法_杭电oj 1052田忌赛马问题

    问题描述 这是中国历史上的一个著名故事. "那是大约2300年前.田吉将军是齐国的一位高级官员.他喜欢与国王和其他人打赛马." "田和国王都拥有三匹不同级别的赛马,分别是 ...

  3. C++描述杭电OJ 2017.字符串统计||

    C++描述杭电OJ 2017.字符串统计|| Problem Description 对于给定的一个字符串,统计其中数字字符出现的次数. Input 输入数据有多行,第一行是一个整数n,表示测试实例的 ...

  4. C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 ||

    C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 || Problem Description 青年歌手大奖赛中,评委会给参赛选手打分.选手得分规则为去掉一个最高分和一个最低分,然后计算平均 ...

  5. 【ACM】杭电OJ 1002

    题目链接:杭电OJ 1002 表面上看是a+b,很简单,其实是大数的相加,所以要考虑的因素有很多:(瞬间觉得要是能用Python多好,哈哈哈) 还有!!! 要特别注意格式的输出!!!真的害死人!!!摸 ...

  6. 杭电OJ分类题目(2)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...

  7. 杭电oj HDOJ 2072 单词数

    杭电oj HDOJ 2072 单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是 ...

  8. 杭电OJ——第1000,1001题

    今天第一次接触杭电OJ,感觉很新奇有趣.希望从今天开始其乐无穷的刷题之路吧 1000题: Problem Description Calculate A + B. Input Each line wi ...

  9. 杭电acm2054java,杭电oj 2054

    题目要求,输入两个数字,判断两个数字是否相等,一开始以为是弱智题目,但怎么样都AC不了,才意识到杭电OJ的输入的数字可能已经超过了计算机数字所能容纳的最大限度,按照目前的水平,我还不会使用链表来进行长 ...

最新文章

  1. Android 近百个项目的源代码,覆盖Android开发的每个领域
  2. DBGrid内使用CheckBox功能
  3. 在浏览器中在线尝试无服务器框架项目!
  4. JAVA软件工程师应该具备的技能有哪些?
  5. NoSQL数据存储引擎
  6. 设计师如何了解行业方向?推荐设计师交流平台
  7. 【报告分享】2019应届生求职趋势报告.pdf(附下载链接)
  8. CSS垂直居中的11种实现方式
  9. HDU 2819 Swap(二分图匹配)
  10. VC6 ODBC 例子 之一
  11. Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
  12. 小程序坑 redirectTo 计时器 setInterval clearInterval
  13. caffe安装成功后测试
  14. 时间管理——帕累托法则(二八定律)
  15. 可视化h5界面编辑器_超优秀 H5可视化制作编辑器H5DS
  16. M0+体系结构与指令系统简介
  17. 求职秘技2:为什么公司不喜欢要应届毕业生
  18. LARS:LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS论文阅读
  19. gl-opendrive插件(车俩3D仿真模拟自动驾驶)
  20. BSCI验厂考勤资料工资作假不一致解决方案

热门文章

  1. 视频分类/动作识别数据库研究现状
  2. USTC English Club Note20171018
  3. [云炬商业计划书阅读分享]袜子广告策划方案
  4. python :案例:银行卡
  5. 小波变换理解:消失矩、支撑长度的理解
  6. VTK修炼之道24:图像基本操作_单颜色通道图像合成彩色
  7. 保存Delphi中的环境设置中的library path
  8. 函数的多态性以及虚函数
  9. 汇编语言串指令经典题目
  10. npm package.json中的dependencies和devDependencies的区别