给c++写python的split()与input()【python一样写c++、一】
python的split确实是很香的功能。
写c++的时候,就会想着,要是能直接input().split()那不挺好。
实际上真的可以:自己动手,丰衣足食。
先放成品展示。
int main(){
auto k=input().split();//k的类型是vector<string>
cout<<k<<endl;
}
完整代码在文章末尾。
1.首先,写一个input()不难,getline+return就行
mystring input(string c=""){
cout<<c;
mystring s;
getline(cin,s);
return s;
}
为什么是mystring呢?因为我们想要实现input().split()的效果。普通的string不能胜任,所以自己构造一个mystring的类(具体往下看)
2.写一个split()函数。
考虑到便捷性,直接把它写成成员函数。
这个mystring类就继承string类。写成class mystring:public string也行。
用struct主要是应为加入的成员函数都是public。
实现部分就爆扫过去,扫到ch(默认空格)就记录位置,然后插入到一个vector<string>里
struct mystring:string{//继承string类,写成class mystring:public string也行
mystring() :string() {}
mystring& operator=(const string &c) {
(*this).assign(c);
return *this;
}
vector<string> split(char c=' '){
vector<string> x;
int last=0,len=0;
for(int i=0;i<size();++i){
if(at(i)==c){
x.push_back(substr(last,len));
last=i+1;
len=0;
}
else{
len++;
}
}
if(last<size())
x.push_back(substr(last,len));
return x;
}
}s;
其实更简洁与接近python的是使用find,但时间复杂度都是O(n),写好了我也不想改了。
本文作者XXOY
3.OK!
我们就可以直接
auto k=input().split();
用auto是因为简单,也可以写成vector<string> k;
4.加一个输出函数
由于c++不能直接打印vector,所以我们自己写一个重载。
具体的写法下次再教(可以关注我),这次先放个例子。
template<typename T>
ostream& operator<<(ostream &o,vector<T> &x){
char ch=0;
if(typeid(T)==typeid(string)) ch='\'';
o<<"["<<ch<<x[0]<<ch;
for(int i=1;i<x.size();++i){
o<<", "<<ch<<x[i]<<ch;
}
o<<"]";
return o;
}
还加入了string的特判,加一个‘,更接近python。
OK,完毕,下面是完整代码
#include<bits/stdc++.h>
using namespace std;
struct mystring:string{//继承string类
mystring() :string() {}
mystring& operator=(const string &c) {
(*this).assign(c);
return *this;
}
vector<string> split(char c=' '){
vector<string> x;
int last=0,len=0;
for(int i=0;i<size();++i)
if(at(i)==c){
x.push_back(substr(last,len));
last=i+1,len=0;
}
else ++len;
if(last<size())
x.push_back(substr(last,len));
return x;
}
}s;
template<typename T>
ostream& operator<<(ostream &o,vector<T> &x){
char ch=0;
if(typeid(T)==typeid(string)) ch='\'';
o<<"["<<ch<<x[0]<<ch;
for(int i=1;i<x.size();++i){
o<<", "<<ch<<x[i]<<ch;
}
o<<"]";
return o;
}
mystring input(string c=""){
cout<<c;
mystring s;
getline(cin,s);
return s;
}
int main()
{
auto k=input().split();//k的类型是vector<string>
cout<<k<<endl;
}
//本文作者XXOY
这就是input()、split() 的全部内容了。
我还写了比如类似python map一样,转换列表(vector)的东西,将和那个cout<<vector一起,分成两篇来讲。
比如这样
auto c=my_map(my_int,k);//k是vector<string>
cout<<c;
后续请看我主页(应该能咕完)。
我是XXOY,我们下次再见。
给c++写python的split()与input()【python一样写c++、一】的更多相关文章
- 一句python,一句R︱python中的字符串操作、中文乱码
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...
- Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题
前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...
- Python中split()函数的用法及实际使用示例
Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...
- 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5
孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
- python学习(8)实例:写一个简单商城购物车的代码
要求: 1.写一段商城程购物车序的代码2.用列表把商城的商品清单存储下来,存到列表 shopping_mail3.购物车的列表为shopping_cart4.用户首先输入工资金额,判断输入为数字5.用 ...
- 劳动节快乐!手写个核心价值观编码工具 - Python实现
前言 今天是五一劳动节,祝各位无产阶级劳动者节日快乐! 然后来整活分享一些有趣的东西~ 这个小工具是我大学时做着玩的,对于各位接班人来说,12个词的核心价值观这东西,大家都非常熟悉了,这工具可以实现将 ...
- python中split函数的使用
最近学习python,对split函数做了下总结,内容如下:
- python 函数split()
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
- 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4
孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
随机推荐
- Linux基础第七章:磁盘阵列(RAID)
一.磁盘阵列 二.磁盘阵列类型 1.RAID 0 2.RAID 1 3.RAID 5 4.RAID10 三.磁盘阵列配置 1.硬件方式 2.软件方式 一.磁盘阵列独立硬盘冗余阵列(RAID, Redu ...
- PWM脉宽调制
PWM(pulse width modulation) .由微处理器输出一系列占空比不同的矩形脉冲(单个周期相同),应用在测量,通信,功率控制与变换的许多领域.优点是从微处理器到被控系统的信号都是数字 ...
- [2002年NOIP提高组] 均分纸牌
有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动.移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上:在编 ...
- Mysql学习:3、sql数据类型及命令
1.sql功能分类: 2.常见数据类型: 3.sql命令: DDL命令: a.创建数据库: create database testdatabase(数据库名称) character set utf8 ...
- Linux 第二节(基本命令)
www.linuxcool.com 一.ifconfig 1.Ip 地址 2.MAC地址 3.收到的数据包(RX) 4.发送的数据包(Tx) 二.uname uname -a //查看系统内核及 ...
- CSR,SSR,PreRender原理解密
CSR.SSR.Prerender 原理全解密 做前端的同学们肯定或多或少听说过CSR,SSR,Prerender这些名词,但是大多肯定只是停留在听说过,了解过,略懂一点,但是,你真的理解这些技术 ...
- redis - 常用方法封装总结
package com.citydo.utils; import org.springframework.data.redis.connection.DataType; import org.spri ...
- 普通的patch 和使用git 打patch
参考博客: https://www.cnblogs.com/laoxiaobaiup/p/9455088.html https://blog.csdn.net/u012701023/article/d ...
- React++antd+ProComponents可编辑表格EditableProTable组件实现表单中的可编辑列表组件
需求: 在新增&编辑表单中,共分三个表单模块,第二个模块设计为一个可编辑表格组件,其中可选下拉列表依赖外层第一个模块的某条数据值,提供新增.编辑.删除.按规定条件去重等功能,并在第三个模块中自 ...
- jmeter之【报错记录】
{ "code": "E0001", "success": false, "description": "Co ...