c++ substr截取中间部分字符串_杭电OJ 字符串处理类部分题解
一、前言
不知不觉已经大三上学期了,可作为一个计算机狗还没有考过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 字符串处理类部分题解相关推荐
- c++怎么输入带有空格的字符串_杭电OJ 字符串处理类部分题解
一.前言 不知不觉已经大三上学期了,可作为一个计算机狗还没有考过CCF-CSP.因平时学习内容主要与安全方面相关,对于此类算法类的考核并没有太多的准备,故打算开始刷题复习算法和数据结构,准备CCF认证 ...
- 田忌赛马贪心算法_杭电oj 1052田忌赛马问题
问题描述 这是中国历史上的一个著名故事. "那是大约2300年前.田吉将军是齐国的一位高级官员.他喜欢与国王和其他人打赛马." "田和国王都拥有三匹不同级别的赛马,分别是 ...
- C++描述杭电OJ 2017.字符串统计||
C++描述杭电OJ 2017.字符串统计|| Problem Description 对于给定的一个字符串,统计其中数字字符出现的次数. Input 输入数据有多行,第一行是一个整数n,表示测试实例的 ...
- C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 ||
C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 || Problem Description 青年歌手大奖赛中,评委会给参赛选手打分.选手得分规则为去掉一个最高分和一个最低分,然后计算平均 ...
- 【ACM】杭电OJ 1002
题目链接:杭电OJ 1002 表面上看是a+b,很简单,其实是大数的相加,所以要考虑的因素有很多:(瞬间觉得要是能用Python多好,哈哈哈) 还有!!! 要特别注意格式的输出!!!真的害死人!!!摸 ...
- 杭电OJ分类题目(2)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...
- 杭电oj HDOJ 2072 单词数
杭电oj HDOJ 2072 单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是 ...
- 杭电OJ——第1000,1001题
今天第一次接触杭电OJ,感觉很新奇有趣.希望从今天开始其乐无穷的刷题之路吧 1000题: Problem Description Calculate A + B. Input Each line wi ...
- 杭电acm2054java,杭电oj 2054
题目要求,输入两个数字,判断两个数字是否相等,一开始以为是弱智题目,但怎么样都AC不了,才意识到杭电OJ的输入的数字可能已经超过了计算机数字所能容纳的最大限度,按照目前的水平,我还不会使用链表来进行长 ...
最新文章
- Android 近百个项目的源代码,覆盖Android开发的每个领域
- DBGrid内使用CheckBox功能
- 在浏览器中在线尝试无服务器框架项目!
- JAVA软件工程师应该具备的技能有哪些?
- NoSQL数据存储引擎
- 设计师如何了解行业方向?推荐设计师交流平台
- 【报告分享】2019应届生求职趋势报告.pdf(附下载链接)
- CSS垂直居中的11种实现方式
- HDU 2819 Swap(二分图匹配)
- VC6 ODBC 例子 之一
- Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
- 小程序坑 redirectTo 计时器 setInterval clearInterval
- caffe安装成功后测试
- 时间管理——帕累托法则(二八定律)
- 可视化h5界面编辑器_超优秀 H5可视化制作编辑器H5DS
- M0+体系结构与指令系统简介
- 求职秘技2:为什么公司不喜欢要应届毕业生
- LARS:LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS论文阅读
- gl-opendrive插件(车俩3D仿真模拟自动驾驶)
- BSCI验厂考勤资料工资作假不一致解决方案