常用LINUX_C字符串处理函数整理

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*删除在src中的str串*/
char *strdel(char *src, char *str)
{
    if(NULL == src || NULL == str)
    {
        return NULL;
    }

    char *pd = strstr(src, str);
    if(NULL == pd)
    {
        return NULL;
    }

    int offset = pd - src;
    strcpy(&src[offset], &src[offset + strlen(str)]);
    return src;
}

/*在指定位置插入串*/
char *strins(char *src, int pos, char *ins)
{
    if(NULL == src || NULL == ins)
    {
        return NULL;
    }

    int src_len = strlen(src);
    if(pos > src_len)
    {
        return NULL;
    }

    int ins_len = strlen(ins);
    char * st = (char *)malloc(sizeof(char)*(src_len - ins_len));

    strcpy(st, &src[pos]);

    strcpy(&src[pos + ins_len], st);

    free(st);
    st = NULL;

    strnset(&src[pos], ' ', ins_len);
    memcpy(&src[pos], ins, ins_len);

    return src;
}

/*替换,将src中的dest串替换成rep*/
char *strrep(char *src, char *dest, char *rep)
{
    if(NULL == src || NULL == dest || NULL == rep)
    {
        return NULL;
    }

    char *pd = strstr(src, dest);
    if(NULL == pd)
    {
        return NULL;
    }

    int offset = pd - src;

    if(NULL == strdel(src, dest))
    {
        return NULL;
    }

    if(NULL == strins(src, offset, rep))
    {
        return NULL;
    }

    return src;
}

/*替换所有src中出现的dest为rep*/
char *strallrep(char *src, char *dest, char *rep)
{
    if(NULL == src || NULL == dest || NULL == rep)
        return NULL;

    while(strrep(src, dest, rep) != NULL)
    {

    }
    return src;
}

/*去除字符串前后空格*/
char *strtrim(char *str)
{
    if(NULL == str)
        return NULL;

    int i = 0;
    while(str[i] == ' ')
    {
        i++;
    }

    strcpy(&str[0], &str[i]);

    i = strlen(str) - 1;

    while(str[i] == ' ')
    {
        //printf("%c ", str[i]);
        i--;
    }

    str[i+1] = '\0';

    return str;

}

/*取得字符串哈希值*/
unsigned int strhash(char *str)
{
	unsigned int seed = 131;
	unsigned int hashval = 0;
	char *tempstr = str;

	while(*tempstr){
		hashval = hashval * seed + (*tempstr++);
	}

	return (hashval & 0x7FFFFFFF);
}

/*获取src串中的label值*/
char *strhtmllabel(char *src, char *label)
{
    if(NULL == src || NULL == label)
        return NULL;

    char *tmp = (char *)malloc(sizeof(char) * strlen(label)+10);
    strcpy(tmp, label);
    strins(tmp, 0, "<");
    strins(tmp, strlen(tmp) , ">");
    //printf("tmp = %s\n", tmp);
    char *beg_p = strstr(src, tmp);
    if(NULL == beg_p)
    {
        free(tmp);
        tmp = NULL;
        return NULL;
    }

    strins(tmp, 1, "/");
    char *end_p = strstr(src, tmp);
    if(NULL == end_p)
    {
        free(tmp);
        tmp = NULL;
        return NULL;
    }

    beg_p = &beg_p[strlen(tmp)-1];
    *end_p = '\0';

    free(tmp);
    tmp = NULL;
    return beg_p;
}

/*直接将文件读入*/
char *strgetfiletext(const char* path)
{
	char *filename = path;
	FILE *f = fopen(filename, "rb");
	fseek(f, 0, SEEK_END);
	long len = ftell(f);
	fseek(f, 0, SEEK_SET);
	char *data = (char *) malloc(len + 1);
	fread(data, 1, len, f);
	fclose(f);
	f = NULL;
	return data;
}

int main()
{

    char *str1 = "hello world!";
    char str2[300] = {0};

    //strcpy 拷贝
    strcpy(str2, str1);//strncpy(str2, str1, strlen(str1));
    printf("%s\n", str2);

    //strrev 转置
    strrev(str2);
    printf("%s\n", str2);
    strrev(str2);

    //strstr 取得指定字串的指针
    char *p = strstr(str2, "world");
    printf("%s\n",p);

    //sscanf char* 转 int等一切
    char *str_num = "123";
    int num = 0;
    sscanf(str_num, "%d", &num);
    printf("num = %d\n", num);


    //sprintf int等一切 转 char*
    int val = 456;
    char str_val[30] = {30};
    sprintf(str_val, "%d", val);
    printf("str_val = %s\n", str_val);

    //strtok 查找以X串分割开的串 注意:strtok会修改str2
    printf("strtok = %s\n", strtok(str2, " "));
    char *cp = NULL;
    while((cp = strtok(NULL, " ")) != NULL)
        printf("strtok = %s\n", cp);

    strset(str2, 0x00);
    strcpy(str2, str1);

    //strupr 转大写字母
    strupr(str2);
    printf("strupr : %s\n", str2);

    //stricmp 忽略大小写比较
    printf("stricmp = %d\n", stricmp(str1, str2));

    //strlwr 转小写字母
    strlwr(str2);
    printf("strlwr : %s\n", str2);


    //strset/strnset 将串整体赋值
    strset(str2, 0x00);//strnset(str2, 0x00, 300);
    printf("%s\n", str2);

    //替换
    strcpy(str2, str1);
    strallrep(str2, "l", " ");
    printf("%s\n", str2);

    //去除前后空格
    strcpy(str2, "  hello!  ");
    strtrim(str2);
    printf("strtrim:%s,%d\n", str2, strlen(str2));

    //字符串哈希
    strcpy(str2, "hello!");
    printf("hashval = %d\n", strhash(str2));
    strcpy(str2, "hello world!");
    printf("hashval = %d\n", strhash(str2));
    strcpy(str2, "hello!");
    printf("hashval = %d\n", strhash(str2));


    //取html标签
    strcpy(str2, "<html><div>hello!</div></html>");
    printf("strhtmllabel:%s\n",strhtmllabel(str2, "div"));

    return 0;

}


你可能感兴趣的:(常用LINUX_C字符串处理函数整理)