C/C++消除字串中的無效字元,用於載入配置
阿新 • • 發佈:2019-01-30
字元陣列是一個數組,每個元素的值都可以改變。而字串指標指向的是一個常量字串,它被存放在程式的靜態資料區,一旦定義就不能改變。這是最重要的區別。
#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;
}