1. 程式人生 > >C++常用的字串處理函式-全

C++常用的字串處理函式-全

這是自己用stl實現的一些字串處理函式和常用的字串處理技巧,經驗正基本無誤,可直接使用,若有問題,可相應列出
包括:split
string to int
int to string
join

#include <string.h>
#include <vector>
#include <string>
//字串分割函式,類似python的split
vector<string> split(char s[],const char *delim)
{
    char *token = strtok(s,delim);
    vector
<string>
vstr; while(token!=NULL){ string stmp = token; vstr.push_back(stmp); token = strtok(NULL,delim); } return vstr; } //若用string呼叫如下 string s="192.168",sm="."; vector<string> ss=split(const_cast<char *>(s.c_str()),sm.data()); //引數都為string版 vector
<string>
split(string s,string delim) { char *ss=const_cast<char *>(s.c_str()); const char *ddelim= delim.data(); char *token = strtok(ss,ddelim); vector<string> vstr; while(token!=NULL){ string stmp = token; vstr.push_back(stmp); token = strtok(NULL,ddelim); } return
vstr; } //以下給出類似於Python 中join功能的實現,後續不斷完善 string join(const vector<string> &vs,const string &s) { int n=vs.size(); string restr; for(int i=0;i<n-1;++i)restr=restr+vs[i]+s; restr +=vs[n-1]; return restr; } //char *或vector<char>轉string vector<char> vs; vs.push_back(char); vs.push_back('\0'); //特別注意char* 轉 string s; s=string(vs.data()); char a[100]="6666666"; s=string(a); //列出自己實現的string to int( atoi) int myAtoi(string str) { if(str=="")return 0; if(str.size()==1) { if(str[0]>'9'||str[0]<'0')return 0; } int beg=0; while(str[beg]==' ')beg++;//越過前面的空字元 if((str[beg]>'9'||str[beg]<'0')&&str[beg]!='-'&&str[beg]!='+')return 0;//第一個非空字元非法 int sign=(str[beg]=='-')?-1:1; //判斷符號 int j=(str[beg]=='+'||str[beg]=='-')?beg+1:beg;//判定何時開始計算 int res=0; for(int i=j;i<str.size();++i) { if(str[i]>'9'||str[i]<'0')break;//遇到非數字即不看後面的內容 res=res*10+(str[i]-'0'); } return res*sign; } //列出自己實現的unsigned int轉string,無bug string itostring(unsigned int a) { if(a==0)return "0"; vector<char> vc; while(a){ unsigned int tmp = a%10; vc.push_back(tmp+'0'); a=a/10; } int n=vc.size(); string s(n,'0'); for(int i=n-1;i>=0;--i)s[n-1-i]=vc[i]; return s; } //atoi 或者 itoa (int to string)int atoi(const char *nptr); char*itoa(int value,char*string,int radix); char *strtok(char s[], const char *delim); //strod字串轉浮點 string = "3.1415926 This stopped it"; x = strtod(string, &stopstring); printf("string = %s\n", string); printf("strtod = %f\n", x); printf("Stopped scan at: %s\n", stopstring); string = 3.1415926 This stopped it strtod = 3.141593 Stopped scan at: This stopped it string = -1011 This stopped it 1. const char* 和string 轉換 (1) const char*轉換為 string,直接賦值即可。 EX: const char* tmp = "tsinghua". string s = tmp; (2) string轉換為const char*,利用c_str()或者data() EX: string s = "tsinghua"; const char*tmp = s.c_str(); const char *tmp = s.data(); 2. char*和const char*之間的轉換 (1) const char*轉化為char*,利用const_cast<char*> EX: const char* tmp = "tsinghua"; char* p = const_cast<char*>(tmp); (2) char*轉化為const char*,直接賦值即可。 char* p = "tsinghua". const char* tmp = p; 3. char*和string之間的轉換 有了12的基礎,char*和string轉化就很簡單了。 (1)char*轉化為string,直接賦值即可。 EX: char* p = "tsinghua". string str = p; (2)string轉化為char*,走兩步,先是string->const char*,然後是const char*->char* EX: string str = "tsinghua"; char* p = const_cast<char*>(str.c_str()):