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中字符串读入和处理的更多相关文章

  1. C++ 中字符串标准输入的学习及实验

    声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入 1.cin>> cin使用空白(空格.制表符.回车)来确定字符串的结束位置. cin会将换行符留在输入输出队列中. #i ...

  2. [技术]浅谈OI中矩阵快速幂的用法

    前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...

  3. OI中的莫比乌斯反演

    OI中的莫比乌斯反演 莫比乌斯函数 想要学习莫比乌斯反演,首先要学习莫比乌斯函数. 定义 莫比乌斯函数用\(\mu(x)\)表示.如果\(x\)是\(k\)个不同质数的积,则\(\mu(x) = (- ...

  4. c++中字符串的截取:

    c++中字符串的截取: string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加.我们将介绍一些主要函数. 1.函数fin ...

  5. C/C++中字符串String及字符操作方法

    本文总结C/C++中字符串操作方法,还在学习中,不定期更新. .. 字符串的输入方法 1.单个单词能够直接用std::cin,由于:std::cin读取并忽略开头全部的空白字符(如空格,换行符,制表符 ...

  6. C语言中字符串详解

    C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...

  7. SQL SERVER 将表中字符串转换为数字的函数 (详询请加qq:2085920154)

    在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:1. convert(int,字段名)   例如:select convert(int,'3')2. cast(字段名 as i ...

  8. Java中字符串的几个实例

    String str=new String("abc");new 对象时,位于堆中,同时看字符串常量中是否有字符串"abc",如果没有,则进行添加,同时进行关联 ...

  9. PHP中字符串的连接和换行

    PHP中字符串的连接使用点,不是加号.换行\n需要用双引号括起来,不能用单引号. eg. <?php print_r("hello"."\n"); pri ...

随机推荐

  1. Linux 之 Memcached

    Memcached的安装使用 参考教程:[千峰教育] 环境:CentOS 6.8 一.简介: memcached作为高速运行的分布式缓存服务器,具有以下的特点. · 协议简单 · 基于libevent ...

  2. ASP 500错误解决方法

    最有效的解决方法: 经  c:\windows\temp 目录增加everyone写权限. 环境: windows2008

  3. Tarjan缩点+DAG图dp

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  4. Loj #125. 除数函数求和(2)

    link : https://loj.ac/problem/125 分块calc即可. #include<bits/stdc++.h> #define ll long long using ...

  5. BZOJ 3065 带插入区间第K小值

    题目描述 Description 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间k小值. ...

  6. BZOJ3295动态逆序对

    一道比较傻的CDQ分治 CDQ: 主要用于解决三位偏序的问题 #include<cstdio> #include<cctype> #include<algorithm&g ...

  7. youtube-dl取代you-get?

    以前了解到you-get这个项目,支持超多视频网站下载,不过偶尔会出各种问题. 今天看到依云的博客文章:放弃 you-get,转投 youtube-dl 然后特地看了youtube-dl的支持列表:h ...

  8. c++ 操作Mysql ado

    #pragma once #ifndef DB_MYSQL_H #define DB_MYSQL_H   #include "stdafx.h" #include <wins ...

  9. match excel test search replace 用法

    1 test:测试string是否包含有匹配结果,包含返回true,不包含返回false. 2 reg.test(str) 3 <script type="text/javascrip ...

  10. 浅谈PropertyChanged是如何被初始化的?

    http://www.cnblogs.com/wpcockroach/p/3909081.html