[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++ 字串 分割 切割 拆解 拆分 分解 解析