#include
#include
/*将strSrc字符串中第一次出现的strDest字符串替换成strReplace*/
void replaceFirst(char **strSrc,char *strDest,char *strReplace)
{
char str4[strlen(*strSrc)+1];
char *p;
strcpy(str4,*strSrc);
int nLenFirstPart = 0;
if((p=strstr(*strSrc,strDest))!=NULL)/*p指向strDest在strSrc中第一次出现的位置*/
{
while(*strSrc!=p && *strSrc!=NULL)/*将strSrc指针移动到p的位置*/
{
nLenFirstPart++;
(*strSrc)++;
}
memset(*strSrc,0,strlen(*strSrc));/*将strSrc指针指向的值变成/0,以此来截断strSrc,舍弃strDest及以后的内容,只保留strDest以前的内容*/
strncpy(*strSrc,str4,nLenFirstPart);/*strSrc后拼接上p前面的部分*/
strcat(*strSrc,strReplace);/*在strSrc后拼接上strReplace*/
strcat(*strSrc,strstr(str4,strDest)+strlen(strDest));/*strstr(str4,strDest)是指向strDest及以后的内容(包括strDest),strstr(str4,strDest)+strlen(strDest)就是将指针向前移动strlen(strDest)位,跳过strDest*/
}
}
/*将strSrc出现的所有的strDest都替换为strReplace*/
void replace(char **strSrc,char *strDest,char *strReplace)
{
char str4[strlen(*strSrc)+1],strRemain[strlen(*strSrc)+1],strFirstPart[256];
char *p;
strcpy(str4,*strSrc);
strcpy(strRemain,*strSrc);
int nLenFirstPart = 0;
memset(*strSrc,0,strlen(*strSrc));/*将strSrc指针指向的值变成0*/
memset(strFirstPart,0,sizeof(strFirstPart));
while((p=strstr(strRemain,strDest))!=NULL)/*p指向strDest在strRemain中第一次出现的位置*/
{
nLenFirstPart = 0;
while(&strRemain[nLenFirstPart] != p && strRemain[nLenFirstPart] != '\0')/*将strRemain指针移动到p的位置*/
{
nLenFirstPart++;
}
/*strSrc后拼接上p前面的部分*/
strncpy(strFirstPart,strRemain,nLenFirstPart);
strFirstPart[nLenFirstPart] = '\0';
strcat(*strSrc,strFirstPart);
strcat(*strSrc,strReplace);/*在strSrc后拼接上strReplace*/
strcpy(strRemain,p+strlen(strDest)); // strRemain指向去掉了最前面的strDest的p
}
strcat(*strSrc,strRemain);/*strstr(str4,strDest)是指向strDest及以后的内容(包括strDest),strstr(str4,strDest)+strlen(strDest)就是将指针向前移动strlen(strDest)位,跳过strDest*/
}
/*截取src字符串中,从下标为start开始到end-1(end前面)的字符串保存在dest中(下标从0开始)*/
voidsubstring(char*dest,char*src,intstart,intend)
{
char*p=src;
inti=start;
if(start>strlen(src))return;
if(end>strlen(src))
end=strlen(src);
while(i
{
dest[i-start]=src[i];
i++;
}
dest[i-start]='/0';
return;
}
/*返回src中下标为index的字符*/
charcharAt(char*src,intindex)
{
char*p=src;
inti=0;
if(index<0||index>strlen(src))
return0;
while(i
returnp[i];
}
/*返回str2第一次出现在str1中的位置(下表索引),不存在返回-1*/
intindexOf(char*str1,char*str2)
{
char*p=str1;
inti=0;
p=strstr(str1,str2);
if(p==NULL)
return-1;
else{
while(str1!=p)
{
str1++;
i++;
}
}
returni;
}
/*返回str1中最后一次出现str2的位置(下标),不存在返回-1*/
intlastIndexOf(char*str1,char*str2)
{
char*p=str1;
inti=0,len=strlen(str2);
p=strstr(str1,str2);
if(p==NULL)return-1;
while(p!=NULL)
{
for(;str1!=p;str1++)i++;
p=p+len;
p=strstr(p,str2);
}
returni;
}
/*删除str左边第一个非空白字符前面的空白字符(空格符和横向制表符)*/
voidltrim(char*str)
{
inti=0,j,len=strlen(str);
while(str[i]!='/0')
{
if(str[i]!=32&&str[i]!=9)break;/*32:空格,9:横向制表符*/
i++;
}
if(i!=0)
for(j=0;j<=len-i;j++)
{
str[j]=str[j+i];/*将后面的字符顺势前移,补充删掉的空白位置*/
}
}
/*删除str最后一个非空白字符后面的所有空白字符(空格符和横向制表符)*/
voidrtrim(char*str)
{
char*p=str;
inti=strlen(str)-1;
while(i>=0)
{
if(p[i]!=32&&p[i]!=9)break;
i--;
}
str[++i]='/0';
}
/*删除str两端的空白字符*/
voidtrim(char*str)
{
ltrim(str);
rtrim(str);
}