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()):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM