如何用C++分割一个字符串?

前言 在上机面试的时候,遇到了一道题,它的输入是两行字符串,每行字符串有未知数量的数字(两行数字数量一致),用空格分隔开,输入形如: 12 34 567 888 99 100 358 74 58454 742 4469 88 并不提前提供每行的数字数量。而是让用户自己切分。 当时在上机考试时,我没有使用C++实现这一功能,而是使用Java里的split()进行处理。 后来,考试结束后,我上网查询C++切分字符串的写法,发现C++并没有原生提供类似split(某个字符)的写法。 那么有什么方法能替代呢? 方法1:使用string的find等函数()配合substr()进行切分 根据知乎大佬的回答,他提供的第一种解决方案是: C++ 的 string 为什么不提供 split 函数? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/36642771/answer/865135551 #include <iostream> #include <cstring> #include <vector> void split(const std::string& s, std::vector<std::string>& tokens, const std::string& delimiters = " ") { std::string::size_type lastPos = s.find_first_not_of(delimiters, 0); std::string::size_type pos = s.find_first_of(delimiters, lastPos); while (std::string::npos != pos || std::string::npos != lastPos) { tokens.push_back(s.substr(lastPos, pos - lastPos)); lastPos = s....

七月 2, 2023 · JohnathanLin

CSAPP第二章-信息的表示与处理

23年3月23日,我在公司进行了一次分享会,内容是本文的内容。在分享前,我重新对文章知识点进行了梳理,补充了很多细节。现将补充的细节重新编写到本文中。 什么是二进制数? 我们日常使用的是十进制,数字包括0,1,2,3,4,5,6,7,8,9 再往下数,就得向前进一位,变成10,然后从个位数开始继续增加11,12,13…19 计算机最底层使用的是二进制,数字包括0和1,再往下数,也是前进一位,变成10。注意,这个10并不是十进制的十,而是十进制的二。 如何用二进制来表示一个整数? 二进制 十进制(无符号) 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 二进制如何表示负数? 原码 我们把最高位(最左边的位)作为符号位,后面剩余的位代表的数作为数值具体的大小。 比如:四位原码二进制表示数字 — 3 1 011 开头的1代表负号,后面的011表示3。这样拼起来就是负3了 但是这么表示可能会有什么问题? 原码表示负数存在的问题 0000和1000,都是表示数字0,但是一个是正0,一个是负0。这显然不符合我们对零的理解。 无法进行加减运算:观察以下式子1(0001) + (-3(1011)) = -4(1100) 0001 +1011 -——- 1100 那么如何用二进制表示一个数字,才能处理加减操作呢? 补码 以时钟为例,拨动时钟理解补码 把红色指针从指向“8”拨动到“6”, 有几种方式? 有两种方式,如图所示: 以此图为例,如果指针目前指向8(红色指针),要把它拨到6(绿色指针),有两种方式: 把8往逆时针方向旋转到6(蓝色)这种方式就是进行8-2=6 把8往顺时针方向旋转到6(黄色)这种方式是进行8+10=18,但是时钟只能显示12个数字,所以18-12=6 补码减法的逻辑是:通过加法,给数字加上一个超过表示上限的数,使其最高位“丢失”的方式来实现减法。...

四月 30, 2023 · JohnathanLin

我的自我介绍

欢迎 你好啊,我是本站的站长,我的花名是凌虚。 “凌虚”是动漫《秦时明月》中,张良的佩剑名。凌虚剑身修长秀美,通体晶莹夺目,虽为利器却不见血腥之气,剑身之上有一十八颗碧血丹心,高贵儒雅之风浓重。而其持剑人为张良。取此花名,有暗含自己才智比肩张良之嫌。 本站叫“风萧古道”,英文名是“WindyPath”。 “风萧”来自于“风萧萧兮易水寒”;“古道”来自于“古道西风瘦马”。为了押韵,我把两个词拼在了一起,就是“风萧古道”。为了让外国友人能体会这个词的优雅,我翻遍英语词典,找到了两个单词,“Windy”和“Path”,然后将它们也拼起来,就是“WindyPath”。 我 我目前是一个游戏服务器开发。之前还做过网页Web的全栈开发。现在已经不摆弄html标签了。 我19年毕业,20年底来到中国上海。我和计算机的其他故事可以到这里查阅。 理想主义 有很长一段时间,我不知道要为何而学习软件开发。如果是为了挣钱,那么我现在也已经在挣钱了。那么在我漫长的软件开发生涯中,我要为了什么而继续前行呢? For Chinese Software 为了中国软件。 文章 本站文章更新频率不高,但是我经常查阅互联网上其他独立博客站长的文章。有的站长帖子多,但是大多是发牢骚(当微博发),或者是转载(当笔记本/csdn)。这样的博客对于软件开发技术的水平的提升是没有什么效果的。 所以我的博客里,只有一种文章: 技术文章 哪怕是牢骚,也必须是与软件行业相关的牢骚,确保所有来访者能从中了解或者学习一些东西。 其他的日常生活的吐槽和牢骚就放到Twitter里。 联系方式 Email: windypathblog@gmail.com Telegram: @windypath

四月 29, 2023 · JohnathanLin

Windows XP虚拟机中文版无需激活下载

在这里直接下载我最后完成的虚拟机镜像 虚拟机镜像下载: 链接:https://pan.baidu.com/s/1yfY0SjDrtOeuTiEWf7YizA?pwd=374l 提取码:374l 我本地的VirtualBox 版本:6.1 我可以先聊聊怀旧吗 也许对于老外来说,Win95是他们的青春,所以他们做了React95这样的UI库,或者大家一起努力写了个操作系统serenity。但是对于咱们国内的用户而言,当家用PC走进千家万户时,映入眼帘的是——Windows XP。 一位中国台湾同胞sh1zuku编写开发了一个网页版的Windows XP模拟器:项目链接,在线演示,还有另一位来自越南的老哥khang-nd写了Windows 7的网页模拟器在线演示。 我自然没有能力和时间去编写类似系统的开发,但是有一个想法从我的脑中浮现:那么我就装一个Windows XP虚拟机到电脑上就好了。 你可能会选择的做法 安装VirtualBox; 下载镜像:从MSDN Itellyou中找到Windows XP的镜像,下载; 在VirtualBox中安装镜像; 启动镜像,安装系统 那么你会发现,安装的Windows XP只有30天试用。在二十一世纪初期,盗版泛滥,微软采取了非常强硬的措施限制盗版。即使你安装时输入了正确的序列号,微软也会要求你使用电话等方式进行激活。 但是我们是来怀旧的啊! 正确的做法 不能再使用这种正版的镜像了,需要使用别人处理好的,不需要激活的镜像。 这里我找到了github上的一位老哥提供的链接github WinXPImage,但是他的镜像是位于谷歌云盘上的。我把它下载之后放进百度网盘里了: 链接:https://pan.baidu.com/s/1ypKeaZixJXnbqAo4ZT0YLQ?pwd=30dd 提取码:30dd 在VirtualBox安装此镜像后,你将获得一个无限期使用的,英文版的Windows XP。 但你不一定能启动起来,你需要在导入OVA文件后,在OVA文件的目录下,执行以下命令: vbox-img geometry --filename Windows_XP_Professional-disk1.vdi --format VDI --cylinders 5874 --heads 255 --sectors 56 来自于github issue streeg 老哥给出的解决方案。 如何汉化Windows XP? 如果只是用英文版Windows XP,那么就达不到我们“怀旧”的目的了。 Windows XP英文版默认没有中文语言包。 我翻遍互联网,终于在一个犄角旮旯里找到了语言包mui_win_xp_pro_n_cd1.iso。 我把它下载之后放进百度网盘里了: 链接:https://pan.baidu.com/s/18mW9OCRejMDoEpUcih-zlA?pwd=peu4 提取码:peu4 然后, 设置VirtualBox里Windows XP虚拟机和物理机共享文件夹,具体方法 将mui_win_xp_pro_n_cd1.iso通过共享文件夹从物理机传进虚拟机中 安装,具体方法 最后重启虚拟机即可。 上图!

十月 2, 2022 · JohnathanLin

Java TreeSet的一些用法和特性

先看一个例子(kotlin实现) import java.util.TreeSet /** * 定义一个用于测试TreeSet集合的结构 * 用TreeSet进行排名 * id: 玩家id * score: 玩家得分 */ data class PlayerScore(var id: Int, var score: Int): Comparable<PlayerScore> { override fun compareTo(other: PlayerScore): Int { return if (score > other.score) { 1 } else if (score < other.score) { -1 } else { 0 } } } fun main() { //创建一个TreeSet val treeSet: TreeSet<PlayerScore> = TreeSet() //创建3个PlayerScore,其中对id为101的对象存一个引用 //将3个PlayerScore装入set中 val id101Obj = PlayerScore(101,100) //按不同的顺序加入TreeSet treeSet.add(PlayerScore(102,200)) treeSet....

六月 18, 2022 · JohnathanLin