C语言实现几个简单的字符串处理函数

很久没写C程序了,写的时候又是习惯性的到网上找现成的程序,但是一些简单的不如自己写写,当温习了。正好要处理字符串,就从字符串处理开始吧。

/**
* 判断字符串是否以某个字符串开头
* @param str 目标字符串
* @param reg 要比较的字符串
* @return 如果以指定字符串开头返回true,否则返回false
* */
bool str_startwith(const char *str, const char *reg) {
while (*str && *reg && *str == *reg) {
str ++;
reg ++;
}
if (!*reg) return true;
return false;
}

/**
* 判断字符串是否以某个字符串结尾
* @param str 目标字符串
* @param reg 要比较的字符串
* @return 如果以指定字符串结尾则返回true,否则返回false
* */
bool str_endwith(const char *str, const char *reg) {
int l1 = strlen(str), l2 = strlen(reg);
if (l1 < l2) return false;
str += l1 - l2;
while (*str && *reg && *str == *reg) {
str ++;
reg ++;
}
if (!*str && !*reg) return true;
return false;
}

/**
* 替换字符串里的字符
* @param str 目标字符串
* @param f 要被替换字符
* @param reg 替换的字符
* */
void str_replace(char *str, const char f, const char rep) {
while (*str) {
if (*str == f) {
*str = rep;
}
str ++;
}
}

/**
* 用指定的字符串分割字符串,比如“Hello World”用“ ”分割后变<br>
* 成“Hello”和“World”。<br>
* @param str 要操作的字符串
* @param sp 分隔符
* @param out 分割后的字符串数组,通常以char buf[][]来声明
* @param max 单个字符串的最大长度
* @param num 预期分割后的字符串个数,不能超过字符串数组的一维数
* @return 返回实际分割后的字符串数量
* */
int str_split(const char *str, const char *sp, char **out,
int max, int num) {
char *s1 = (char *)str;
char *s2 = NULL;
int slen = strlen(sp);
int count = 0;
while (s1 && count < num) {
char *d = ((char *)out + max * count);
s2 = strstr(s1, sp);
if (s2) {
strncpy(d, s1, (s2 - s1) > (max - 1) ? (max - 1) : (s2 - s1));
s1 = s2 + slen;
} else {
strcpy(d, s1);
s1 = s2;
}
count ++;
}
return count;
}

/**
* 用指定的字符串分割字符串,比如“Hello World”用“ ”分割后变<br>
* 成“Hello”和“World”。<br>
* @param str 要操作的字符串
* @param off 要操作的字符串的偏移量
* @param len 要操作的字符串长度
* @param sp 分隔符
* @param out 分割后的字符串数组,通常以char buf[][]来声明
* @param max 单个字符串的最大长度
* @param num 预期分割后的字符串个数,不能超过字符串数组的一维数
* @return 返回实际分割后的字符串数量
* */
int str_split(const char *str, int off, int len, const char *sp,
char **out, int max, int num) {
char *cp = (char *) malloc (len + 1);
if (!cp) return 0;
memset(cp, 0, (len + 1));
memcpy(cp, str + off, len);
int ret = str_split(cp, sp, out, max, num);
free(cp);
return ret;
}


注:先这么多,以后如果写了新的或者有了修改,再来更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值