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);
}
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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值