OI中字符串读入和处理
OI中字符串读入和处理
在NOIP的“大模拟”题中,往往要对字符串进行读入并处理,这些字符串有可能包含空格并以\n作为分割,传统的cin >> scanf() 等等,不可能达到要求,因为这些都是以\n space (空格) \t (Tab) \r 作为分割符。
通用处理方法
所以要处理字符串输入时,要以getline()作为输入,输入后构造为【字符串流】,然后可以进行【分割】后进行任意处理。这是比较通用的做法,几乎可以适应所有情况。
#include<vector>
#include <sstream>
#include <iostream>
//分割为【单词】后进行处理,这是最通用的办法。
void Split(string &line, vector<string> &words)
{
string word;
//这个是in string stream 需要#include<sstream>,然后就可以用类似于 cin>>的方式任意处理了。
istringstream iss(line,istringstream::in);
while (iss >> word)
{
words.push_back(word);
}
}
int main()
{
string lines ;
//读入一行,可能会在结尾有\r,但不会包含\n,
std::getline(cin, lines);
//删除最后的 \r 如果要split的话,则可不调用
lines.erase(lines.find_last_of("\r"));
vector<string> words;
//分割为每个单词
Split(lines,words);
for (int i = 0; i < words.size(); i++)
{
cout << words[i] << endl;
}
其他可能用到的函数
| 函数名称 | 说明 |
|---|---|
getline(cin,string) |
从“流”中读入一行,读到\n为止,有可能包括\r |
string::c_str() |
把 string 转换为 char *,常用于转换后,再次转换为 int double等 |
string::erase(pos = 0, len = npos); |
从pos开始删除len个字符,如果len【缺省】,则删除到尾。 |
string::empty() |
string是否为空? |
string::length() string::size() |
string的长度,这两个是一样的。 |
string::find(str,pos = 0) |
【字符串】(字符查找需要用find_first_of)查找,默认从0开始 |
string::rfind(str,pos = npos) |
从右边查找 |
string::substr(pos = 0,len = npos |
获取子串,如果省略len,就从pos一直到结尾 |
string::replace(pos,len,str2); |
替换,把从pos开始,长度为len的部分替换为str2 |
下面的函数查找的是字符而不是字符串
| 函数名称 | 说明 |
|---|---|
string::find_first_of(string& str, pos = 0) |
字符查找(没有串),str中任一匹配就算找到 |
string::find_last_of(string& str, pos = 0) |
从后往前找 |
可能用到的转换函数
在c++98中是不能直接从string 转换为其他类型的(c++11 就可以),所以若需要转换则首先需要通过c_str()转为为char *然后进行转换。
| 函数名称 | 说明 |
|---|---|
strtol (char* str, char** endptr, int base) |
转换为base进制的整形,endptr为【转换】后【剩下】的,即没有转换成功的字符串, 可以为 null |
strtoll (char* str, char** endptr, int base) |
转换为base进制的long long |
strtod(char* str, char** endptr); |
转换为double,endptr 可以为 null |
strtold(char* str, char** endptr); |
转换为long double |
OI中字符串读入和处理的更多相关文章
- C++ 中字符串标准输入的学习及实验
声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入 1.cin>> cin使用空白(空格.制表符.回车)来确定字符串的结束位置. cin会将换行符留在输入输出队列中. #i ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- OI中的莫比乌斯反演
OI中的莫比乌斯反演 莫比乌斯函数 想要学习莫比乌斯反演,首先要学习莫比乌斯函数. 定义 莫比乌斯函数用\(\mu(x)\)表示.如果\(x\)是\(k\)个不同质数的积,则\(\mu(x) = (- ...
- c++中字符串的截取:
c++中字符串的截取: string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加.我们将介绍一些主要函数. 1.函数fin ...
- C/C++中字符串String及字符操作方法
本文总结C/C++中字符串操作方法,还在学习中,不定期更新. .. 字符串的输入方法 1.单个单词能够直接用std::cin,由于:std::cin读取并忽略开头全部的空白字符(如空格,换行符,制表符 ...
- C语言中字符串详解
C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...
- SQL SERVER 将表中字符串转换为数字的函数 (详询请加qq:2085920154)
在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:1. convert(int,字段名) 例如:select convert(int,'3')2. cast(字段名 as i ...
- Java中字符串的几个实例
String str=new String("abc");new 对象时,位于堆中,同时看字符串常量中是否有字符串"abc",如果没有,则进行添加,同时进行关联 ...
- PHP中字符串的连接和换行
PHP中字符串的连接使用点,不是加号.换行\n需要用双引号括起来,不能用单引号. eg. <?php print_r("hello"."\n"); pri ...
随机推荐
- AC日记——旅行 洛谷 P3313
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...
- 转---派遣例程与IRP结构
派遣例程与IRP结构 文章出处:http://www.cnblogs.com/zmlctt/p/3978124.html#commentform 提到派遣例程,必须理解IRP(I/O Requ ...
- Android Q 兼容那些事
文章微信公众号「AndroidTraveler」首发 5 月 20 号参加了 Android Q Labs,因此本篇说一说会议的部分内容以及自己的一些想法. 会议主要是加深开发者对 Android Q ...
- ElasticSearch常用结构化搜索
最近,需要用到ES的一些常用的结构化搜索命令,因此,看了一些官方的文档,学习了一下.结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的. 它们都有精确的格式,我们可以对这些数 ...
- Ubuntu 16.04下安装WineHQ
说明: 1.Wine和WIneHQ没什么区别,新版和旧版的问题. 2.安装了深度的Wine包也可以和WineHQ一起兼容,因为深度的应用名已经加了deepin前缀,所以不冲突. 3.安装了Wine之后 ...
- ios构造和析构
遵循规则: 构造先父类后子类 析构先子类后父类 所以,自定义的init函数需要首先[super init....] dealloc中[super dealloc]却是放在最后的 - (id)initW ...
- Android:MVC模式(上)
很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...
- Windows10下Apache2.4配置Django
开发环境 Windows 10 x64 Apache 2.4 x64 Python 2.7.11 x64 Django 1.9.6+ 下载和安装mod_wsgi 到 http://download.c ...
- 关于finfo_file函数获取文件mime值验证出错的问题
今天在做图片上传 验证图片mime值时 突然发现 个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...
- 命令行查看w3wp进程信息
用windbg.mdbg等调试器调试时,当出现多个w3wp进程并且用户名相同,需要区分每个w3wp进程对应的PID(进程ID)和应用程序池信息. 我们用以下方式得到每个w3wp进程的详细信息. Win ...