C语言库函数字符串的函数-string.h-详解

使用此函数时需注意头文件“#include<string.h>”

使用puts和gets是需要头文件“#include<stdio.h>”

1,输入字符串函数:

 格式:gets(字符数组名字)

char str[30];
gets(str);

 

 输入“students and book”(个个单词之间有一个空格)这会存储到str中,且会在17个字符后面自动添加“\0”,“\0”也会存储在str中。


2,输出字符串:

 格式:puts(字符数组名字)

char str[20]={"students and book"};
puts(str);

此时输出结果:

students and book


3,连接字符串:

 格式:stract(字符数组名字1,字符数组名字2)

 使用strcat时注意:字符数组1定义的长度必须足够长,以便可以容纳后面的数组。连接字符,也可以连接的是字符串常量。

char str1[30]={"students and"};
char str2[30]={"book"};
strcat(str1,str2);
puts(str1);
strcat(str2,"and program");
puts(str2);

此时输出结果:

students and book

book and program

此外还有:stract(字符数组名字1,字符数组名字2,n) 意思是将字符串2前n个字符连接到字符串1后面。


4,赋值字符串函数

 格式:strcpy(字符数组名字1,字符数组名字2)

char str1[60],str2[40]="project";
str1=str2;//(这个是错误的写法),正确strcpy(str1,str2)
str1="students";//(错误),正确的strcpy(str1,"students")

注意字符串1必须定义足够长;

int i;
char str1[10]="abcdefjhi";
char str2[10]="ABCDEF";
strcpy(str1,str2);
puts(str1);
puts(str2);
for(i=0;i<10;i++)
printf("%c",str[i]);

输出结果如下 

ABCDEF

ABCDEF

A,B,C,D,E,F,,h,i,,


5,比较字符串

 格式:stract(字符数组名字1,字符数组名字2)

以下为比较方法阅读对比;在系统中比较,从前到后,就是比较他们所存储的ASCII码。 

strcmp("abc","aacbdkl") >0

strcmp("abc","abc") =0

strcmp("abc","abxy") <0

strcmp("abxy","abcd") >0


6,求字符串长度

格式:strlen(字符串)

char str1[10]="abc";
char str2[10]={'a','b','c','\0'};
char str3[10]={'a','b','c','\0','d','e','\0'};

此时strlen(str1)= strlen(str2)= strlen(str3)= 3


7,大写字母转换小写字母

格式:strlwr(字符串)

char str[10]={"ABCDedf"};
printf("%s",strlwr(str));

输出:abcdef

小写转大写上同

格式:strupr(字符串)


 8,memcmp()

格式:int memcmp ( const void * ptr1, const void * ptr2, size_t num )
效果跟strcmp()类似
如果(str1>str2)返回一个(>0)的数
如果(str1=str2)返回一个(=0)的数
如果(str1<str2)返回一个(<0)的数

float arr1[] ={1.0,2.0,3.0,4.0};
float arr2[] ={1.0,3.0,5.0,};
int compare = memcmp(arr1,arr2,8);//比较两个数组前8个字节的元素
printf("%d",compare);

输出结果小于0


9,memmove()

格式:void * memmove ( void * destination, const void * source, size_t num )

跟memcpy()不同的地方在于memmove()可以复制source内部的字符串

int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
memmove(arr+4, arr,20);//从arr数组第1个元素开始替换20个字节(5个元素)到arr数组第5个元素
for(i = 0;i < 10;i++)
{
    printf("%d",arr[i]);
}

输出结果12341234510


10,memcpy()

格式:void * memcpy ( void * destination, const void * source, size_t num )

从 source 指定的内存块中复制 num 个字节到 destination 指定的内存块中
返回的是指针变量destination
复制的是字节,需要注意数据类型
不能复制source自身的字符串

int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
int arr2[10] = {0};
int i = 0;
memcpy(arr2, arr1, 20);//20个字节,int类型4个字节一个元素,复制了5个元素
for(i = 0;i < 10;i++)
{
    printf("%d",arr2[i]);
}

输出结果1234500000


11,strstr()

格式:char * strstr ( const char *, const char * )

寻找str2是否在str1中出现,出现则返回地址

char str[20] = "abcedefghi";
char str2[20] = "defg";
char * ret = strstr(str1, str2);//需要一个指针变量来接收返回的地址
if(ret == NULL)
{
    printf("没有找到");
}
else
{
    printf("%s",ret);
}
输出结果defghi
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值