C语言中常见的字符串处理函数

c语言中常见的字符串处理函数">C语言中常见的字符串处理函数

C语言中提供了大量丰富的字符串处理函数,大致可以分为字符串的输入,输出,合并,修改,比较,转换,复制,搜索几类。
用于输入输出的函数包含在stdio.h中而其他的字符串处理函数一般包含在string.h中。

1:字符串的输出函数
int puts(char const*strPtr);
输出字符串到显示器中去,传入的实参可以是字符串数组也也可以是字符指针
一般情况下我们用fputs来代替

2:字符串的输入函数
char *gets(char *strptr);
char *fgets();
从标准键盘输入一个字符串存放到指针strptr指向的字符数组,一般我们使用fgets来操作

3:获取字符串的长度
int strlen(char const*string);
获取字符串的长度,返回的是字符的个数,但是不会包括’\0’,结束符

4:字符串拷贝函数
char *strcpy(char*des,char*src);
char *strncpy(char *des,char *src,int size);
将src指向的字符串拷贝到des指向的字符串数组中去,结束符也一同进行拷贝,size参数也可以拷贝制定长度的字符串,建议des为字符数组
注意:目标尽量使用字符数组,因为如果是字符指针的话,分配的内存在常量池中,是不允许进行改变的,容易造成段错误

5:字符串的连接函数
char * strcat(const *char str1,const *char str2);
char *strncat(const *char str1,const *char str2,int size);
将str2指向的字符串连接到str1指向的字符后面,同时会删除str1后面的’\0’,返回的是str1指向字符串的首地址重点内容

6:字符串比较函数
int strcmp(const char * str1,const char *str2);
int strncmp(const char*str1,const char *str2,int size);
按照ascii码来进行比较,并由函数返回值进行判断
返回0,字符串1等于字符串2,
大于0,字符串1大于字符串2,
小于0,字符串1小于字符串2,

7:字符串分割函数
char* strtok(char *str,const char *delimiters);
根据delimiters指向的分割符号,将str指向的字符串分割成若干个子字符串,同时返回的是分割出的子字符串

8:字符串中是否包含字符
char * strchr(const char *,int c);//从做往右寻找字符c
char * strrchr(const char *,int c); //从有往左开始寻找字符c
判断字符串中是否包含字符串

9:内存的初始化
memset(void *s,int c,size_t n);

10:内存的拷贝
memcpy(void *des,void *src ,size_t ,n);

下面通过案例来演示:

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


int main(int argc,char *argv[]){

    char str_array[20] = {'\0'};
    //gets(str_array);
    //puts(str_array);

    fgets(str_array,sizeof(str_array),stdin);//从标准输入中读入字节数-1个字节的字符
    fputs(str_array,stdout);

    char *ptr_string = "helloworld";
    printf("ptr_string len:%d\n",strlen(ptr_string));

    printf("==============strcpy==================\n");
    char str_array2[20] = {'\0'};
    strcpy(str_array2,ptr_string);
    printf("str_array2:%s\n",str_array2);
    printf("---------------------------\n");

    char str_array3[10] = {"1234567890"};
    strncpy(str_array3,ptr_string,7);//将ptr_str的前7位拷贝进去
    printf("str_array3:%s\n",str_array3);

    printf("===============strcmp===============\n");

    char *ptr_string_1 = "helloworld";
    char *ptr_string_2 = "helloworld";

    printf("value:%d\n",strcmp(ptr_string_1,ptr_string_2));//等于0相等,大于零,即前一个大于后一个,小于0,前一个小于后一个,按ascii码比较
    char *ptr_string_3 = "nuli";
    printf("value:%d\n",strcmp(ptr_string_3,ptr_string_2));

    printf("=============strcat=================\n");
    char str_array4[10] = "hello";
    strcat(str_array4,str_array3);
    printf("str_array4:%s\n",str_array4);

    printf("============strchr=================\n");//判断字符串中是否包含字符,返回的是这个字符的指针(从左往右边)
    char *ptr_string_4 = strchr(str_array4,'l');
    printf("ptr_string4:%s,%c\n",ptr_string_4,*ptr_string_4);

    char *ptr_string_5 = strrchr(str_array4,'l');//从右往左寻找
    printf("ptr_string4:%s,%c\n",ptr_string_5,*ptr_string_5);

    if(strchr(ptr_string_5,'o')!=NULL){
        printf("ptr_string_5 contains o!\n");
    }else{
        printf("ptr_string_5 not contains o!\n");
    }

    printf("==================strstr===========\n");//字符串中是否包含另外一个字符串
    char *str9 = "hello";
    char *str10 = "first helloworld";
    if(strstr(str10,str9) != NULL){
        printf("str10 contains str9\n");
    }else{
        printf("str10 not contains str9\n");
    }

    printf("=================strtok=============\n");

    char str[] ="hello:zzf:hello:tom";
    int counter = 0;
    char *p = strtok(str,":");
    while(p!=NULL){
        counter++;
        printf("%s",p);
        p = strtok(NULL,":");
    }

    printf("================memset,memcpy==========");//内存清空和拷贝
    char src[] = "i love you";
    char des[] = "you love me";
    memset(des,0,sizeof(des));//清空或者初始化
    memcpy(des,src,sizeof(des)-1);//拷贝des字节数-1,最后一个符号用于存储结束符号
    return 0;
}


谢谢大家访问,代码是可以直接进行run的,由于作者是一个新Coder,所以如果大家有什么指点的地方,欢迎留言或私信

http://www.niftyadmin.cn/n/783849.html

相关文章

Ajax优缺点

优点&#xff1a; &#xff08;1&#xff09;最大的优点就是页面无刷新&#xff0c;用户的体验非常好&#xff1b; &#xff08;2&#xff09; 使用异步方式与服务器通信&#xff0c;具有更加迅速的相应能力&#xff1b; &#xff08;3&#xff09;可以把以前的一些服务器负担的…

面试复盘

限流算法中&#xff0c;计数器方法&#xff0c;可以如何优化 滑动窗口 先说一下原来正常算法的弊病&#xff0c;我们假设qps是100&#xff0c;最后10ms过来100个请求&#xff0c;下一秒的前10ms又过来100个请求&#xff0c;那么就会在某一秒中一次性接受到200个请求&#xff…

用C语言打造自己的字符串拷贝函数

上一节中我们主要讲到了字符串使用的一些常用的函数&#xff0c;那这里我们可以打造一个自己的字符串拷贝函数&#xff0c;类似于strcpy这样的函数, 原理就是使用指针一次便利待复制 的字符串的每个字符&#xff0c;然后拷贝到目标中去 直接上代码了&#xff1a; #include&l…

导师双选制系统

导师双选制系统&#xff0c;功能如下&#xff1a; 该系统分为三个用户&#xff0c;一个是老师&#xff0c;一个是学生&#xff0c;一个是管理员&#xff0c;每个角色都有一个不同的界面&#xff0c;对于学生来说可以进行导师信息浏览&#xff0c;申请填报&#xff0c;个人信息修…

--n和n-- ,++i和i++

- -n和n- -代表的意思都是n减一&#xff0c;但是也不小的区别&#xff0c;在循环中使用会有相差一次的现象 1&#xff1a;- - n的例子 #include<stdio.h>int main() {int n 3;while(--n)printf("%d\n", n); }上面的while&#xff08;- -n&#xff09;可以拆…

双向循环链表示例

双向循环链表的各种操作 相对于单链表多了一个指针prev指向全面的节点 #include<stdio.h> #include<stdlib.h>typedef struct student{int socre;struct student *prev;struct student *next; } LinkList;LinkList *create(int n) { LinkList *head, *node…

C语言中常见的C的标准库函数

1:stdlib.h中的声明的整形算术&#xff0c;随机数函数和转换函数 int abs(int value); long abs(long value); //返回指定数值的绝对值int rand(void);返回0和RAND_MAX(至少32767)之间的伪随机数void srand(unsigned int seed); //避免每次运行获取相同的随机数序列,种子尽量…

C语言中的结构体------C语言的实体

C语言中的结构体——>C语言的实体 1.结构体概念 2. 结构体声明 3. 结构体定义 5. 结构体变量成员的引用 6. 结构体变量的赋值 7. 结构体变量的初始化 8. 结构体的嵌套 结构体的概念&#xff1a; C语言中引入了一种构造出句类型成为结构体&#xff0c;他是由若干个成…