1. 程式人生 > >字串分割函式的C++實現

字串分割函式的C++實現

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
int main()
{
    void readtest();//宣告
    readtest();//呼叫
    return 0;
}
void readtest()
{
    void split_cpp(const string& str,vector<string>& vector_name,const string& segmentation_condition);//宣告
    string file,linetext;
    vector<string> split_line;
    file="../test.txt";//讀取的檔案路徑已經檔名,其中"../"代表的是當前專案下的目錄(相對路徑)
    ifstream readin(file);
    if(!readin.is_open())//只讀,如果開啟檔案失敗.
    {
        cout<<"can't open the file!"<<endl;
    }    
    while(getline(readin,linetext))//while迴圈,getline讀行,每行存入linetext.
    {        
        split_cpp(linetext,split_line," ");//呼叫函式,分割條件為空格        
        cout<<split_line.at(0)<<" "<<split_line.at(1)<<" "<<split_line.at(2)<<" "<<split_line.at(3)
               <<" "<<split_line.at(4)<<endl;//輸出split_line.
    }
}
void split_cpp(const string& str,vector<string>& vector_name,const string& segmentation_condition)
//第一個引數為輸入引數,讀進來還沒有操作的.第二個引數是分割完成後存入的陣列名,第三個引數為分割條件
{
    string ::size_type lastpos=str.find_first_not_of(segmentation_condition,0);//從0開始,第一個不是空格的位置
    string ::size_type pos=str.find_first_of(segmentation_condition,lastpos);//從上一個不是空格的位置開始,第一個空格的位置
    while (string::npos!=pos||string::npos!=lastpos)
    {
        vector_name.push_back(str.substr(lastpos,pos - lastpos));//取子串從lastpos位置開始,長度為pos-lastpos
        lastpos=str.find_first_not_of(segmentation_condition,pos);//同上
        pos=str.find_first_of(segmentation_condition,lastpos);//同上
    }
}

使用非qt的c++實現,注意包含標頭檔案以及使用名稱空間.

另外,讀取檔案的方式也為c++和前文中的qt不同.

(另文中split_cpp函式是我在網上看到的,非原創,出處已忘記.)