精华内容
下载资源
问答
  • c++ 按分割符切割string字符串

    千次阅读 2017-10-27 16:03:02
    /*************************************************** 函数名称: SplitString* 功能描述: 按切割符截取字符串* 参 数: const string & srcStr源字符串* 参 数: vector<string> &...
    /**************************************************
    * 函数名称: SplitString
    * 功能描述: 按切割符截取字符串
    * 参    数: const string & srcStr源字符串
    * 参    数: vector<string> & vec切割后的字符串存放容器
    * 参    数: const string & separator切割符
    * 返 回 值: void
    * 其他说明: 
    * 其它说明: 
    * 修改日期 修改人 修改内容
    * --------------------------------------------
    * 
    **************************************************/
    void SplitString(const string& srcStr, vector<string>& vec, const string& separator)
    {
    
        string::size_type posSubstringStart; // 子串开始位置
    
        string::size_type posSeparator;        //  分隔符位置
    
        posSeparator= srcStr.find(separator);
        posSubstringStart= 0;
        while (string::npos != posSeparator)
        {
            vec.push_back(srcStr.substr(posSubstringStart, posSeparator- posSubstringStart));
    
            posSubstringStart= posSeparator+ separator.size();
            posSeparator= srcStr.find(separator, posSubstringStart);
        }
    
        if (posSubstringStart!= src.length())  // 截取最后一段数据
            vec.push_back(srcStr.substr(posSubstringStart));
    }

    展开全文
  • C++ 切割string splite方法的实现

    千次阅读 2016-04-09 23:11:06
    vector splitStr(string str, char delimiter){ vector r; string tmpstr; while (!str.empty()){ int ind = str.find_first_of(delimiter); if (ind == -1){
    vector<string> splitStr(string str, char delimiter){
            vector<string> r;
            string tmpstr;
            while (!str.empty()){
                int ind = str.find_first_of(delimiter);
                if (ind == -1){
                    r.push_back(str);
                    str.clear();
                }
                else{
                    r.push_back(str.substr(0, ind));
                    str = str.substr(ind + 1, str.size() - ind - 1);
                }
            }
            return r;
        }

    展开全文
  • for(int i=0;i<n;i++){ String str=in.nextLine();...意思是将str这个字符串用’,'切割后分别放到data这个String类型的数组中 假设 我分别输入 123 456 789 最后得到的data数组内容是:123,456,789 ...
    for(int i=0;i<n;i++){
    String str=in.nextLine();
    String []data=str.split(",");
    }
    

    意思是将str这个字符串用’,'切割后分别放到data这个String类型的数组中

    假设
    我分别输入

    123
    456
    789
    

    最后得到的data数组内容是:123,456,789

    展开全文
  • 返回值:一个vector,里面元素是string类型。 vector < string > split ( const string & strs , const string & delim ) { vector < string > res ; if ( strs == "" ) return res ; ...

    最近在做各家公司的笔试题,每次花在数据输入上时间很多,尤其是遇到字符串问题,总是卡壳。而其中最麻烦的就是输入一串字符串,以分隔符进行分隔,比如逗号,忽略出现多次的情况。因为C++不像python和Java有很好的库函数帮助我们,唯一可用的Boost库不能用,这也强迫我们使用自己定义的split函数了。所以,这篇文章也是自己的一个总结,希望自己以后可以查阅,也可以帮助其他需要的同学。

    1. 问题描述

    1. 基础版本:给定一个字符串比如"aa,bb,cc,dd,ee" 让你取出其中的"aa" “bb” “cc” “dd” "ee"五个元素。
    2. 进阶版本: 给定一个字符串比如"aa, , , ,bb,cc, , ,dd, , , ,ee,“让你忽略其中逗号出现多次的情况,还是输出"aa” “bb” “cc” “dd” "ee"五个元素。

    2. 解决思路

    关于自定义字符串分割网上有几种方法

    1. 使用strtok函数
    2. 使用stringstream方法
    3. 使用boost::split方法

    这里的话,因为第三种方法一般的OJ平台可能不能使用boost库了,这里也就不做介绍了,大家感兴趣可以去网上看看。

    3. 自定义分隔字符串二种方法

    一般情况下,我们想拿到一个字符串分隔的函数,就想直接可以用,所以这里的话,我们只把代码贴一下,具体的原理的话网上也是很多,也就不太详细介绍了。

    3.1 使用strtok实现自定义split函数

    函数说明:

    1. strs: 输入字符串,是你要分隔的字符串,比如"aa,bb,cc,dd"或者"aa, , bb, , ,ccc" 它是可以接受多个分隔符的,并自动忽略。
    2. delim: 是分隔符,比如逗号或者其他符号。多个情况也就使用一编就好了。接受参数是字符串。
    3. 返回值:一个vector,里面元素是string类型。
    vector<string> split(const string& strs, const string& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	char* str = new char[strs.size() + 1];
    	strcpy(str, strs.c_str());
    	char* d = new char[delim.size() + 1];
    	strcpy(d, delim.c_str());
    	char* p = strtok(str, d);
    	while (p) {
    		string temp = p;
    		res.push_back(temp);
    		p = strtok(NULL, d);
    	}
    	delete[]str;
    	delete[]d;
    	return res;
    }
    

    3.2 使用stringstream实现自定义split函数

    函数说明:

    1. strs: 输入字符串,是你要分隔的字符串,比如"aa,bb,cc,dd"。这里注意一下:这种方法不能忽略分隔符出现多次的情况,也就是只能处理分隔符出现一次情况。
    2. delim: 是分隔符,比如逗号或者其他符号。只能是一个char类型,也就是接受一个字符。
    3. 返回值:一个vector,里面元素是string类型。
    vector<string> split2(const string& strs,  const char& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	stringstream sstr(strs);
    	string token;
    	while (getline(sstr, token, delim))
    	{
    		res.push_back(token);
    	}
    
    	return res;
    }
    

    4. 实验

    4.1 处理单个分隔符的情况

    比如处理:str1 = "aa,bb,cc,dd,ee"

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <sstream>
    #include <stdlib.h>
    
    using namespace std;
    
    vector<string> split(const string& strs, const string& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	char* str = new char[strs.size() + 1];
    	strcpy(str, strs.c_str());
    	char* d = new char[delim.size() + 1];
    	strcpy(d, delim.c_str());
    	char* p = strtok(str, d);
    	while (p) {
    		string temp = p;
    		res.push_back(temp);
    		p = strtok(NULL, d);
    	}
    	delete[]str;
    	delete[]d;
    	return res;
    }
    
    vector<string> split2(const string& strs,  const char& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	stringstream sstr(strs);
    	string token;
    	while (getline(sstr, token, delim))
    	{
    		res.push_back(token);
    	}
    
    	return res;
    }
    
    int display(vector<string>& res) {
    	int count = 0;
    	for (auto it : res) {
    		cout << it << " ";
    		count++;
    	}
    	cout << endl;
    	return count;
    }
    
    int main() {
    	string strs1 = "aa,bb,cc,dd,ee";
    	string strs2 = "aa,,,,bb,cc,,,dd,,,,ee,,";
    	
    	vector<string> res1 = split(strs1, ",");
    	int count1 = display(res1);
    	cout << count1 << endl;
    
    	vector<string> res2 = split2(strs1, ',');
    	int count2 = display(res2);
    	cout << count2 << endl;
    
    	system("pause");
    	return 0;
    }
    

    在这里插入图片描述

    4.2 处理分隔符出现多次的情况

    比如处理:str2 = "aa,,,,bb,cc,,,dd,,,,ee,,"

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <sstream>
    #include <stdlib.h>
    
    using namespace std;
    
    vector<string> split(const string& strs, const string& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	char* str = new char[strs.size() + 1];
    	strcpy(str, strs.c_str());
    	char* d = new char[delim.size() + 1];
    	strcpy(d, delim.c_str());
    	char* p = strtok(str, d);
    	while (p) {
    		string temp = p;
    		res.push_back(temp);
    		p = strtok(NULL, d);
    	}
    	delete[]str;
    	delete[]d;
    	return res;
    }
    
    vector<string> split2(const string& strs,  const char& delim) {
    	vector<string> res;
    	if (strs == "") return res;
    	stringstream sstr(strs);
    	string token;
    	while (getline(sstr, token, delim))
    	{
    		res.push_back(token);
    	}
    
    	return res;
    }
    
    int display(vector<string>& res) {
    	int count = 0;
    	for (auto it : res) {
    		cout << it << " ";
    		count++;
    	}
    	cout << endl;
    	return count;
    }
    
    int main() {
    	string strs1 = "aa,bb,cc,dd,ee";
    	string strs2 = "aa,,,,bb,cc,,,dd,,,,ee,,";
    	
    	vector<string> res1 = split(strs2, ",");
    	int count1 = display(res1);
    	cout << count1 << endl;
    
    	vector<string> res2 = split2(strs2, ',');
    	int count2 = display(res2);
    	cout << count2 << endl;
    
    	system("pause");
    	return 0;
    }
    

    在这里插入图片描述

    5. 实验说明

    1. 从结果上看 使用strtok函数 和stringstream方法都可以很好的处理单个分隔符的情况。
    2. 但是存在分隔符重复出现的情况下,stringstream方法不能很好的处理,strtok仍然可以很好的处理。

    6. 参考文章

    1. strtok()函数详解!
    2. C++ 字符串的分割函数split 及 用法
    3. c++如何分割带有逗号的字符串
    4. C++常用字符串分割方法
    5. C++分割字符串(以逗号分隔符为例,分割得到相应数字)
    6. C/C++ 使用delete删除指针需小心 “野指针”

    上面的实现方法可能不是最优的,也会出现一些Bug,希望大家可以批评指正,一起学习。之前一直想要写总结,但是一直没写,现在终于写完了,也算是很Nice的。

    展开全文
  • 相比利用临时表的方法,用CTE的Recursive特性可以以很高的效率切割字符串。 下面是我写的一个UDF利用CTE 切割字符串的。CREATE FUNCTION StrSplit(@s NVARCHAR(4000), @sep NVARCHAR(5))RETURNS TABLEAS RETURN
  • string切割

    2018-02-02 21:35:54
    #incldue using namespace std; #incldue #incldue typedef std::vector vecStr;...void SubStr(vecStr& toke, const std::string& src, const std::string& spec) { size_t Pos = 0; size_t Pre
  • String字符串的切割,获取中括号里的数据 //拿到字符串里的值 String s = "[115.89958,37.792965]"; //对字符串进行替换切割 String s1 = s.replace("[", ""); ...
  • 切割c++ string的substr

    2018-03-30 22:00:34
    参考 http://www.cplusplus.com/reference/string/string/std::string::substrstring substr (size_t pos = 0, size_t len = npos) const;Generate substringReturns a newly constructed string object with its ...
  • String 字符串切割

    2019-09-04 15:59:13
    使用split()进行分割字符串,注意切割按照正则切割,如遇到特殊字符要+\\ package String; public class splitString { public static void main(String[] args) { //字符串替换 String str = "HelloWord"; ...
  • public class String_main { public static void main(String[] args) { // String类常用方法 String str = "Hello Word!";// charAt()截取一个字符。 System.out.println(str.charAt(0)); System.out.prin...
  • stringstream切割字符串

    2019-01-27 14:39:34
    这样就实现了字符串的空格切割。 #include&lt;bits/stdc++.h&gt; #include&lt;sstream&gt; //头文件 using namespace std; int main(){ string str="nice to meet you"; string...
  • String切割的方法。

    2017-09-22 17:21:41
    String s=lioos; char a[]=s.toCharArray();...其中是把S字符串,切割成数组。 而split(参数),是通过某一固定参数,来分割字符串。返回一个数组。 String s=1#2#3# char a[]=s.split("#");
  • String split()切割方法

    2020-08-11 16:43:43
    链接: https://www.runoob.com/java/java-string-split.html. 小结: 1)String切割方法split(), 2)split()与substring()的区别: split() 获得该字符串的所有;substring() 获得某段字符串;
  • String字符串的切割

    万次阅读 2018-10-09 08:16:12
    string str = “123abc456”; int i = 3; 取字符串的前i个字符 str=str.Substring(0,i); 去掉字符串的前i个字符 str=str.Substring(i); 从右边开始取i个字符 str=str.Substring(str.Length-i); 从右边开始...
  • 切割尺寸可以手动输入(要自己添加或替换相应代码)本示例是按200像素为单位切割的支持纵向切割和横向切割,最后一个碎片若不足200像素会自动补齐到上一张切割碎片的后面,所以最后一张切割碎片有可能不是200像素宽/...
  • String字符串切割问题

    2016-01-14 17:54:16
    String str="88%"; 问题来了 只要88怎么去掉%? 方法很多: eg1. 用替换 String str = "88%"; String newStr = str.replaceAll("%",""); eg2.切掉最后一位 String str = "88%"; String newStr =str....
  • public static void main(String[] args) { String str = "adb,de,fg"; /** * 在当前字符串中,用后面的替换掉字符串中所有出现的前面的,返回新的字符串 */ String replace = str.replace(&...
  • EditText ...String str = “abc,def;gh,ij;k;lm,no,p;qr,st”; StringTokenizer st = new StringTokenizer(str,”,;”); while(st.hasMoreTokens() ){ System.out.println(st.nextToken()); }
  • string转int: int a = 3; string tem="12"; stringstream ss; ss << tem; ...int转string: ... string tem="12";... stringstream ss;... //tem会变为string类型"3" ...以空格为切割符的字符串切割string sentence=
  • stringstream切割字符串 string num; stringstream ssnum; getline(cin,num); ssnum.clear(); ssnum.str(num); int i=0; while(1) { ssnum&amp;gt;&amp;gt;a[i++]; if(ssnu...
  • std::string 字符串切割

    2018-07-27 14:17:00
    在很多字符串类库里都实现了split函数。不过在std里没有实现。...string> 2 #include <vector> 3 using namespace std; 4 5 vector<string> split(string strtem,char a) 6...
  • String
  • /** * 解析请求的字符串数组 * @param packNo 请求的字符串 如:12,13,15,666 * @return */ private List<String> getRequestParam(String packNo) { List<String> list = new Ar...
  • 直接上码样式超赞好看的原文链接原文链接:jdk8 stream list分割 切割 分批次处理工具类​blog.csdn.netpackage com.store.common.utils;import java.util.*;import java.util.stream.Collectors;im...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,955
精华内容 782
关键字:

切割string