[C/C++基礎]-純C實作字串切割(拆解)split函數
[C/C++基礎]- 純C/C++ 實作字串切割(拆解)split函數
由於最近要利用JAVA來實作字串切割(拆解),所以順便寫一份純C實作字串切割範例,歡迎有興趣的同好也來C/P一下。
純C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void split(char **arr, char *str, const char *del)
{
char *s = strtok(str, del);
while(s != NULL)
{
*arr++ = s;
s = strtok(NULL, del);
}
}
int main ()
{
char str[] ="10,20,30";
const char *del = ",";
char *arr[3];
split(arr, str, del);
int i=0;
while(i<3)
printf("%s\n", *(arr+i++));
return 0;
}
純C++
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
/*
*str:要分割的字串
*pattern:分割依據
*result:分割結果
*/
//const保證不改變原串,&不用建立新的字串
vector<string> splitString(const string& str,const string& pattern)
{
vector<string> result;
//string::size_type型別,left:左邊界位置 right:右邊界位置
string::size_type left, right;
right = str.find(pattern);
left = 0;
while(right != string::npos)
{
//以免字串首部就是分割依據,壓入長度為0的字串
if(right-left)
{
//壓入起始位置為left,長度為(right-left)的字串
result.push_back(str.substr(left, right-left));
}
left = right + pattern.size(); //右邊界右移分割依據的長度,作為新的左邊界
right = str.find(pattern, left); //從left這個位置開始find
}
//退出迴圈時,左邊界不是最後一個元素
if(left != str.length())
{
result.push_back(str.substr(left));
}
return result;
}
int main()
{
string arrA="cd ab cdcdefcdm ncd";
string arrB="cd";
vector<string> res=splitString(arrA,arrB);
int len=res.size();
for(int i=0;i<len;i++)
{
cout<<res[i]<<" ";
}
cout<<"END";
return 0;
}
One thought on “[C/C++基礎]-純C實作字串切割(拆解)split函數”
C/C++ 字串 分割 切割 拆解 拆分 分解 解析