字符串处理常用函数2

字符串处理常用函数2

strncmp & strcmp

strncmp & strcmp都是用来比较字符串的,以前经常用的函数大多是strcmp,其实它还有一个衍生的函数strncmp
strcmp
头文件:string.h
函数原型:int strcmp(const char* stri1,const char* str2);
参数:参数 str1 和 str2 是参与比较的两个字符串。
返回值:如果返回值 = 0,则表示 str1 等于 str2;否则不等

strncmp
头文件:string.h
函数原型:int strcmp(const char* stri1,const char* str2,size_t n);
参数:参数 str1 和 str2 是参与比较的两个字符串,最多比较前 n 个字节
返回值:如果返回值 = 0,则表示 str1 等于 str2;否则不等

总结:当字符串不需要全部相等,只用部分相等时,可以使用strncmp

sprintf & strcat

sprintf和strcat都是用来拼接字符串的
sprintf
函数原型:int sprintf(char buffer, const char format, [argument1,argument2,…]);
这个函数的使用可以参考printf,printf是打印的标准输出流,而sprintf是打印到字符串

strcat
函数原型:char strcat(char dest, const char* src);
这个函数,是把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除dest原来末尾的"\0")。但是这个函数要求 src和dest内存区域不可重叠并且dest内存足够大,以容纳src

总结:sprintf 的使用场景更丰富一点,并且功能更灵活

strtok & strsep

strtok & strsep都是用来对字符串进行分解的,根据分隔符将字符串分隔成若干子串
strtok
函数原型:char *strtok(char *s, const char *delim);
此函数第一次调用时会把s字符串中所有在delim中出现的字符替换为NULL。然后通过依次调用strtok(NULL, delim)得到各部分子串。

strsep
函数原型:char *strsep(char **s, const char *delim);

#include <stdio.h>
#include <string.h>

char test_string1[] = "abdadaskjabdsawdewabdewsababababdewdaj";
char test_string2[] = "this is a test program for two function which is strtok and strsep";
char test_string3[] = "this is a test program, for two function. three strings maybe have different result!";

void fun_strtok()
{
    char *token;
    char delim1[] = "ab";
    char delim2[] = " ";
    char delim3[] = " ,.";

    char *s1 = strdup(test_string1);
    char *s2 = strdup(test_string2);
    char *s3 = strdup(test_string3);

    printf("fun_strtok-test_string1:    %s\n", s1);
    for(token = strtok(s1, delim1); token != NULL; token = strtok(NULL, delim1)) {
        printf("%s/", token);
    }
    printf("\n");

    printf("fun_strtok-test_string2:    %s\n", s2);
    for(token = strtok(s2, delim2); token != NULL; token = strtok(NULL, delim2)) {
        printf("%s/", token);
    }
    printf("\n");

    printf("fun_strtok-test_string3:    %s\n", s3);
    for(token = strtok(s3, delim3); token != NULL; token = strtok(NULL, delim3)) {
        printf("%s/", token);
    }
    printf("\n");

}

void fun_strsep()
{
    char *token;
    char delim1[] = "ab";
    char delim2[] = " ";
    char delim3[] = " ,.";

    char *s1 = strdup(test_string1);
    char *s2 = strdup(test_string2);
    char *s3 = strdup(test_string3);

    printf("fun_strsep-test_string1:    %s\n", s1);
    for(token = strsep(&s1, delim1); token != NULL; token = strsep(&s1, delim1)) {
        printf("%s/", token);
    }
    printf("\n");

    printf("fun_strsep-test_string1:    %s\n", s1);
    for(token = strsep(&s2, delim2); token != NULL; token = strsep(&s2, delim2)) {
        printf("%s/", token);
    }
    printf("\n");

    printf("fun_strsep-test_string1:    %s\n", s1);
    for(token = strsep(&s3, delim3); token != NULL; token = strsep(&s3, delim3)) {
        printf("%s/", token);
    }
    printf("\n");

}

void main()
{
    fun_strtok();
    fun_strsep();
}

运行结果如下

fun_strtok-test_string1:    abdadaskjabdsawdewabdewsababababdewdaj
d+d+skj+ds+wdew+dews+dewd+j+
fun_strtok-test_string2:    this is a test program for two function which is strtok and strsep
this+is+a+test+program+for+two+function+which+is+strtok+and+strsep+
fun_strtok-test_string3:    this is a test program, for two function. three strings maybe have different result!
this+is+a+test+program+for+two+function+three+strings+maybe+have+different+result!+

fun_strsep-test_string1:    abdadaskjabdsawdewabdewsababababdewdaj
++d+d+skj++ds+wdew++dews++++++++dewd+j+
fun_strsep-test_string2:    this is a test program for two function which is strtok and strsep
this+is+a+test+program+for+two+function+which+is+strtok+and+strsep+
fun_strsep-test_string3:    this is a test program, for two function. three strings maybe have different result!
this+is+a+test+program++for+two+function++three+strings+maybe+have+different+result!+

总结:
1、需要注意的是,被处理的字符串会在函数内部被修改,所以不能是字符串常量,必须使用strdup函数将原字符串复制一份,否则会出现段错误
2、可以根据运行结果看到,strsep在分离的时候,会有空字符串的产生,所以在真正使用的时候,必须要对返回值判断,是否未空
3、两个函数在使用的时候有明显区别,strsep函数的第一个参数是二级指针,并且循环分隔的时候,strtok除第一次调用以外,第一个传参都是NULL
4、strtok内部记录上次调用字符串的位置,所以不支持多线程

isalnum

isalnum函数遇到的比较少,这次遇到了,记录一下
isalnum
头文件:ctype.h
函数原型:int isalnum(int c);
参数:要检查的字符
返回值:如果 c 是一个数字或一个字母,则该函数返回非零值,否则返回 0。

路漫漫其修远兮,吾将上下而求索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值