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++、一】的更多相关文章

  1. 一句python,一句R︱python中的字符串操作、中文乱码

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...

  2. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

  3. Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题

    前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...

  4. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  5. 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5

    孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  6. python学习(8)实例:写一个简单商城购物车的代码

    要求: 1.写一段商城程购物车序的代码2.用列表把商城的商品清单存储下来,存到列表 shopping_mail3.购物车的列表为shopping_cart4.用户首先输入工资金额,判断输入为数字5.用 ...

  7. 劳动节快乐!手写个核心价值观编码工具 - Python实现

    前言 今天是五一劳动节,祝各位无产阶级劳动者节日快乐! 然后来整活分享一些有趣的东西~ 这个小工具是我大学时做着玩的,对于各位接班人来说,12个词的核心价值观这东西,大家都非常熟悉了,这工具可以实现将 ...

  8. python中split函数的使用

    最近学习python,对split函数做了下总结,内容如下:

  9. python 函数split()

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...

  10. 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4

    孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

随机推荐

  1. Byte流的压缩小技巧

    使用Lz4: public class Lz4Tool { public static byte[] CompressBytes(byte[] bytes) { return LZ4Codec.Wra ...

  2. linux上安装Oracle 包括常见安装错误(centos8.1,oracle linux8,redhat 8)通过

    谨记 关闭操作系统之前先关闭oracle数据库 oracle用户登录,执行lsnrctl start启动网络监听服务,执行dbstart启动数据库系统. oracle用户登录,执行lsnrctl st ...

  3. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  4. 【Appium_python】启动app,出现多次打开关闭导致失败问题,driver用单例模式(_new_)进行解决。

    运用多设备,启动app多次出现打开又关闭问题,查看后是多次对driver进行实例化,就用单例的模式进行解决. 单例模式(Singleton Pattern)目的就是保证一个类仅有一个实例,每一次执行类 ...

  5. CDH命令

    1.检查http服务是否开启 systemctl status httpd.service 本次没有开启是因为删了Log日志 通过查看http状态发现里面有个引用问题 重新建一个空的Log文件夹重启服 ...

  6. c++ 保存txt文件

    #include <iostream> #include <stdio.h> #include <fstream> #include <queue> # ...

  7. 查看Linux 日志

    # 直接定位到第100行 less +100g xx.log   # 定位到最后一行 less +GG xx.log   # 定位到第100个字节的位置 less +100P xx.log   # 直 ...

  8. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  9. SSD目标检测网络解读(含网络结构和内容解读)

    SSD实现思路 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Pri ...

  10. STM32任意引脚模拟IIC

    关于模拟I2C,任意接口都可模拟(未全部测试,可能存在特殊情况). 关于SDA_IN与SDAOUT:如下定义: 举例:#define MPU_SDA_IN() {GPIOA->CRL&= ...