1. 程式人生 > >C/C++消除字串中的無效字元,用於載入配置

C/C++消除字串中的無效字元,用於載入配置

字元陣列是一個數組,每個元素的值都可以改變。而字串指標指向的是一個常量字串,它被存放在程式的靜態資料區,一旦定義就不能改變。這是最重要的區別。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
// 考慮了右邊有空格的情況,但是沒有考慮左邊有空格的情況
void trim_space(char* str)
{
    if(!str)
        return;
    char* ptr=str;
    int len=strlen(ptr);
    while
(len-1>0 && isspace(ptr[len-1])) ptr[--len]=0; while(*ptr && isspace(*ptr)) { ++ptr; --len; } memmove(str,ptr,len+1); } void trim(char* str) { char* start=str; char*end; int len=strlen(str); end=str+len-1; while(1) { char
c = *start; if(!isspace(c)) break; start++; if(start>end) { str[0]=0; return; } } while(1) { char c=*end; if(!isspace(c)) { break; } end--; if(start>end) { str[0
]=0; return; } } memmove(str,start,end-start+1); str[end-start+1]='\0'; } int main() { char testStr[]=" trim this "; //此處必須使用字元陣列 // char* pTestStr=&testStr[0]; trim_space(testStr); puts(testStr); return 0; } void trim1(char * str, char* sp, char c) { c=' '; char * sp=str; while(*str) { if(*str!=c) { *sp=*str; sp++; } str++; } sp='\0'; } void trim2(string& str,string& del,string::size_type pos=0) { pos=str.find_first_of(del,pos); if(pos=string::npos) return ; trim2(str.erase(pos,1),del); } /* c language*/ int is_ws(char c) { return c==' '; } int trim_3(const char* src, char ** dst) { if(strlen(src)==0) return 0; int src_len=strlen(src); int lp=0; /* left padding */ int rp=0; /* right padding */ while(is_ws(src[lp])&&++lp); while(is_ws(src[src_len-rp-1])&&++rp); if(lp+rp!=0) { (*dst)=(char*)realloc((*dst),sizeof(char)*src_len-lp-rp); } int i; for(i=lp;i<src_len-lp;i++) (*dst)[i-lp]=src[i]; (*dst)[src_len-lp-rp]='\0'; return (lp+rp); } static bool readConfigFile(const char* filePath,const string& key,string& value) { fstream cfgFile; //開啟檔案 cfgFile.open(filePath); if(cfgFile.is_open()) { cout<<"cant not open file\n"; return false; } char temp[1000]; //此處必須是字元陣列 while(!cfgFile.eof()) { cfgFile.getline(temp,1000); string line(temp); trim2(line," "); size_t pos=line.find('='); if(pos==string::npos) return false; string strkey=line.substr(0,pos); //獲取的key 和value還需要trim if(strkey==key) { value=line.substr(pos+1); return true; } } return false; }