[C/C++基礎]-純C實作字串切割(拆解)split函數

[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函數

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *