1.先来看一下JAVA里的字符串分割代码:

首先从标准输入得到一行数据,数据之间用逗号,分隔。

将这行数据存为字符串,然后调用字符串分割函数split将其分割成字符数组String [] strRating,在定义一个整型数组,将字符数组转换成整数数组:


import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args){System.out.println("请输入分数,以英文逗号分隔,:");Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();//首先得到一行输入(以逗号分隔的一组数据),字符串形式strString [] strRating=str.split(","); //去掉str的分割逗号,得到字符数组strRatingint [] nums=new int[strRating.length];//整数数组for(int i=0;i<strRating.length;i++){nums[i]=Integer.parseInt(strRating[i]);//将字符数组的元素转换成整数数组}}
}

2.C++ 标准库里面没有提供string的分割函数

但Boost库提供了split()函数,前提是要下载Boost库并配置好。所有C++没有提供先成的字符串分割函数。

参考:http://www.cplusplus.com/faq/sequences/strings/split/

下面利用STL强大的模板函数来实现C++中string的分割函数:

// C++_IOgetline.cpp : 定义控制台应用程序的入口点。//C++ string 分割:
//http://www.cplusplus.com/faq/sequences/strings/split/#include "stdafx.h"// extract to string
#include <iostream>
#include <string>
#include<vector>
#include<algorithm>
using namespace std;/*利用STL实现字符串分割函数SplitString:
参数说明:
输入:s:待分割的字符串
输出:v:分割结果字符串向量
输入: c:分隔符字符串注意:代码只能分割单分隔符:如:20 10 30 50(即中间只能空格一个)
若空格多个结果不对!
*/
void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& c)
{std::string::size_type pos1, pos2;pos2 = s.find(c);pos1 = 0;while (std::string::npos != pos2){v.push_back(s.substr(pos1, pos2 - pos1));pos1 = pos2 + c.size();pos2 = s.find(c, pos1);}if (pos1 != s.length())v.push_back(s.substr(pos1));
}int main()
{std::string dataStr;std::cout << "Please, enter your data(以空格符分隔): " << endl;std::getline(std::cin, dataStr);std::cout << "your data: " << dataStr << "\n";vector<int> dataVec;vector<string> dataString;SplitString(dataStr, dataString, " ");/*vector<string>转为vector<int>:采用std::transform函数https://blog.csdn.net/ljp1919/article/details/77450074*/cout << "将字符串向量转换成int型向量:" << endl;vector<int> vecInt;std::transform(dataString.begin(), dataString.end(), std::back_inserter(vecInt), [](const std::string& str) { return std::stoi(str); });//lambda expressionfor (auto ele : vecInt){cout << ele << endl;}system("pause");return 0;
}

下面我们重点看一下这个SplitString()函数是怎么实现的:

/*利用STL实现字符串分割函数SplitString:
参数说明:
输入:s:待分割的字符串
输出:v:分割结果字符串向量
输入: c:分隔符字符串注意:代码只能分割单分隔符:如:20 10 30 50(即中间只能空格一个)
若空格多个结果不对!
*/
void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& c)
{std::string::size_type pos1, pos2;pos2 = s.find_first_of(c);/*    size_type find_first_of(const _Myt& _Right,size_type _Off = 0) const _NOEXCEPT{    // look for one of _Right at or after _Offreturn (find_first_of(_Right._Myptr(), _Off, _Right.size()));}*/pos1 = 0;while (std::string::npos != pos2)/*pos=nopos时循环停止*/{v.push_back(s.substr(pos1, pos2 - pos1));pos1 = pos2 + c.size();pos2 = s.find(c, pos1);//pos2找不到分隔符的话就指向(等于)nopos处}if (pos1 != s.length())v.push_back(s.substr(pos1));/*_Myt substr(size_type _Off = 0, size_type _Count = npos) const{  // return [_Off, _Off + _Count) as new stringreturn (_Myt(*this, _Off, _Count, get_allocator()));}*/
}

其中substr()函数原型:

 _Myt substr(size_type _Off = 0, size_type _Count = npos) const{   // return [_Off, _Off + _Count) as new stringreturn (_Myt(*this, _Off, _Count, get_allocator()));}

字符串元素的位置类型使用的是size_type类型;

其中:std::string::npos可以看作是字符串的尾部,即最后一个字符,nopos可以等同于迭代器的end()吧?!。

static const size_t npos = -1;

即:Maximum value for size_t

This constant is defined with a value of -1, which because size_t is an unsigned integral type, it is the largest possible representable value for this type.

参考[1]http://www.cplusplus.com/reference/string/string/npos/

public static member constant

<string>

std::string::npos

npos is a static member constant value with the greatest possible value for an element of type size_t.

This value, when used as the value for a len (or sublen) parameter in string's member functions, means "until the end of the string".

在string的成员函数调用时,如果使用npos作为实参的话,表示直到该字符串的结尾!

As a return value, it is usually used to indicate no matches.

如果作为返回值的话,表面查找等不成功(即:不匹配)

C++ string  STL 实现C++的字符串分割函数split

字符串分割split:将一个字符串通过指定的分隔符分割成若干子串相关推荐

  1. java首字母大写工具类_StringUtil 字符串工具类 将一个字符串的首字母改为大写或者小写 将一 联合开发网 - pudn.com...

    StringUtil 所属分类:Java编程 开发工具:Java 文件大小:2KB 下载次数:14 上传日期:2011-12-26 09:50:51 上 传 者:曲欣亮 说明:  字符串工具类 将一个 ...

  2. 字符串分割split()方法:将一个字符串通过指定的分隔符分割成若干子串

    11111 将这行数据存为字符串,然后调用字符串分割函数split将其分割成字符数组String [] strRating,在定义一个整型数组,将字符数组转换成整数数组: import java.ut ...

  3. Java 字符串分割split空字符串丢失解决方案

    public static void main(String[] args) {String str = "a,b,c,,d,e,,,,,,,,";String[] arr = s ...

  4. c语言以空格分割字符串_C语言strtok()函数:用指定的分隔符分解字符串

    函数名: strtok 头文件: 函数原型: char *strtok(char *str1, const char *str2); 功能: 用指定的分隔符分解字符串 参数:   char *str1 ...

  5. java split 路径,JAVA通过文件路径分隔符分割文件路径

    一般为了避免windows系统和linux系统之间路径分隔符的差异,我们会使用File.separator来代替windows下的"\"或者Linux下的"/" ...

  6. 字符串的split方法(),把字符串分割为数组

    // split()方法 // 作用:使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置(从哪开始分割) // 返回值:分割形成的数组 例子:   ...

  7. 【JS】截取、分割、替换字符串

    substr(start,length)表示从start位置开始,截取length长度的字符串 substring() 方法用于提取字符串中介于两个指定下标之间的字符. split 将一个字符串分割为 ...

  8. 【Kotlin】字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )

    文章目录 一.截取字符串函数 substring 二.拆分字符串函数 split 一.截取字符串函数 substring Kotlin 中提供了 截取字符串函数 substring , 可接收 Int ...

  9. StringTokenizer将一个字符串分解为单词或者标记

    原理:StringTokenizer方法实现了Iterator的设计模式,也直接实现了枚举接口,通常情况下StringTotkenizer对象根据欧洲语言的单词分割将对字符串分解为若干单词,例如: p ...

最新文章

  1. 如何在PowerBuilder 11.x 中通过ADO.NET访问Sybase ASE?
  2. JAVA中console方法怎么用_Java中Console对象实例代码
  3. NeHe教程Qt实现——lesson10
  4. MVC学习(四)几种分页的实现(3)
  5. C/C++ 基本类型注意事项
  6. 判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)
  7. python 数据分析 实际案例_python实战案例:超市营业额数据分析
  8. pandas处理日期的几种常用方法
  9. 第二章 二进制数值和记数系统
  10. 1.6编程基础之一维数组_09向量点积计算
  11. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离
  12. php sql 条件拼组_sql where查询拼接技巧
  13. Linux中断(interrupt)子系统之四:驱动程序接口层 中断通用逻辑层
  14. layui可以动态添加div吗_乳化剂是什么?可以添加到护肤品里吗?
  15. oracle 11g压缩分区表,ORACLE 10g和11g压缩分区表操作脚本
  16. 「面试」TCP/IP常见攻击
  17. java分页前端怎么实现_JavaWeb前端分页显示方法
  18. 《MLB棒球创造营》:走近棒球运动·洛杉矶天使队
  19. 系统缺少OBS Studio的运行时组件 解决方法
  20. DRM驱动(二)之DRM驱动模块简介

热门文章

  1. 2020笔记本性价比之王_【笔记本电脑选购】2020年有哪些款高性价比笔记本电脑值得推荐?(十一月更新)...
  2. flink-cdc 基础教程 附报错解决 2万字 (一)
  3. java获取视频首帧图片用于界面展示
  4. 微信公众号第三方平台投票
  5. 如何构建一个可持续的企业级数据赋能体系?
  6. Tkinter 组件详解(七):Entry
  7. 2018-09-03 KK日记,记一次JVM内存使用过多的诊断
  8. 人体生物钟,24小时器官工作表
  9. python画管柱图_(伍晓平)Python编程技术[Python数据分析与展示
  10. zynq 7000 的流水灯实验