/****************************************************
函数功能:
(1) 子函数strTrimL实现去除字符串左边空格
(2) 子函数strTrimR实现去除字符串右边空格
(3) 子函数strTrim实现去除字符串两边空格
(4) 子函数strLeft实现取字符串左边子串
(5) 子函数strRight实现取字符串右边子串
(6) 子函数strMid实现取字符串子串
(7) 子函数strFill实现字符串填充操作
(8) 子函数strRepl实现字符串替换操作
***************************************************/
#include <stdio.h>
#include <string.h>
#include <memory.h>
#define MAX 100+1
static char s[MAX] = " happyhljkla sdfsdfas ";
static char s1[MAX] = " happyhljkla sdfsdfas ";
static char s2[MAX] = " happyhljkla sdfsdfas ";
static char s3[MAX] = " happyhljkla sdfsdfas ";
static char s4[MAX] = " happyhljkla sdfsdfas ";
/*去除字符串左边空格*/
int strTrimL(char *s)
{
char *p;
for(p=s; *p != '\0';p++) /*查找空格*/
{
if(*p != ' ')
break;
}
memcpy(s, p, p-s); /*将非空格copy过去*/
s[strlen(s)] = '\0'; /*补充结束符\0*/
return 0;
}
/*去除字符串右边空格*/
int strTrimR(char *s)
{
char *p;
p = s2 + strlen(s2)-1; /*指向字符串结尾*/
while(*p == ' ') /*查找右边空格*/
{
*p = '\0'; /*将空格替换为结束符\0*/
p--;
}
return 0;
}
/*去除两边空格*/
int strTrim(char *s)
{
char *p = s;
int i,j,k = 0;
while(*p) /*循环读字符串*/
{
if(*p != ' ') /*查找空格位置*/
s[k++] = *p++; /*保存非空格字符*/
else
p++;
}
s[k] = '\0'; /*补充结束符\0*/
return 0;
}
/*子函数strLeft实现取字符串左边子串*/
int strLeft(char *s, int len, char *result)
{
strncpy(result,s2,len); /*复制前len个字符*/
s2[strlen(s2)] = '\0'; /*补充结束符\0*/
return 0;
}
/*子函数strRight实现取字符串右边子串*/
int strRight(char *s, int len, char *result)
{
int i;
i = strlen(s3) - len; /*去右首串下标*/
strncpy(result, s3+i, len); /*从下标开始复制字符*/
s3[strlen(s3)] = '\0';
return 0;
}
/*子函数strMid实现取字符串子串*/
int strMid(char *s, int start, int len, char *result)
{
strncpy(result, s2+start-1,len); /*确定中间字符串长度并copy*/
result[strlen(result)] = '\0';
return 0;
}
/*字符串替换*/
int strRepl(char *s, char *rs)
{
memcpy(s, rs, strlen(rs)); /*确定rs长度并替换s*/
s[strlen(s)] = '\0';
printf("替换结果为[%s]\n", s );
return 0;
}
/*字符串填充*/
int strFill(char *s, char c, int len, int flag)
{
char cmd[MAX];
/*左填充*/
if(0 == flag){
sprintf(cmd, "%c%s", c, s); /*将两个字符拼在一起*/
printf("左填充后的字符为[%s]\n源字符串长度为[%d]\n填充后字符串长度为[%d]\n", cmd,strlen(s), strlen(cmd));
}
/*右填充*/
if(1 == flag){
sprintf(cmd, "%s%c", s, c);
printf("右填充后的字符为[%s]\n源字符串长度为[%d]\n填充后字符串长度为[%d]\n", cmd,strlen(s), strlen(cmd));
}
return 0;
}
int main(int argc, char *argv[])
{
char result[MAX];
char rs[MAX] = " just do it every day go to happy ";
char c = 'G';
int len = 10;
int start = 10;
printf("原字符串为[%s]\n", s);
strTrimL(s);
printf("去除左边空格位结果为[%s]\n", s);
strTrimR(s2);
printf("去除右边空格位结果为[%s]\n", s2);
strTrim(s1);
printf("去除两边空格位结果为[%s]\n", s1);
strLeft(s2, len, result);
printf("取字符串前%d个字符为[%s]\n",len, result);
strRight(s3, len, result);
printf("取字符串后%d个字符为[%s]\n",len, result);
strMid(s2, start, len, result);
printf("取字符串第%d个字符与后%d个字符之间的子串为[%s]\n",start, len, result);
strRepl(s, rs);
strFill(s4, c, MAX, 0);
strFill(s4, c, MAX, 1);
return 0;
}