C++程序 将字符串拆分为多个子字符串
按某个分隔符拆分字符串是一个非常常见的任务。例如,我们有一个从文件中得到的逗号分隔的项目列表,我们想要在数组中拥有各个项目。
几乎所有的编程语言都提供了一种函数,以某个分隔符拆分字符串。
在C++中
注意:strtok()的主要缺点是它仅适用于C风格的字符串。
因此,我们需要显式地将C++字符串转换为char数组。
许多程序员不知道C++有两个额外的API,这些API更优雅并处理C++字符串。
方法1:使用C++的stringstream API
先决条件 :stringstream API
可以使用字符串对象初始化stringstream对象,它会自动将字符串标记为一个空格字符。 就像“cin”流一样,stringstream允许您将字符串读取为一系列单词流。
一些最常用的StringStream函数。
clear() – 刷新流
str() — 将一系列单词转换为C++字符串对象。
operator << — 将一个字符串对象推入流中。
operator >> — 从流中获取一个单词。
下面的代码演示了它。
输出:
方法2:使用C++ find()和substr() API。
先决条件: find函数 和 substr() 。
这种方法更加健壮,可以解析带有任何分隔符的字符串,而不仅仅是空格(虽然默认行为是在空格上分离)。 从下面的代码中可以很容易地理解逻辑。
输出:
方法3:使用临时字符串
如果您知道分隔符的长度为1,则可以简单地使用一个临时字符串来拆分字符串。这种方法可以节省在方法2的情况下函数的开销时间。
输出
时间复杂度: O(n) 其中 n 是字符串的长度。
辅助空间: O(1)