您的位置:首页 > 编程语言 > C语言/C++

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

2017-01-11 23:50 344 查看

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,所以如果大家有什么指点的地方,欢迎留言或私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息