C语⾔中常⽤的字符数组函数
所有的字符数组处理函数都包括在 <string.h>这个头⽂件中
⼀、strlen 函数
原型:size_t strlen(char const* string);
c语言如何创建字符串数组在C语⾔中如何计算⼀个数组或者⼀个字符数组的长度?在C语⾔中没有字符串类型,字符串是存放在字符型数组中,所以⼀般形式的字符串就是数组。
⼀般来说,⼤家都是使⽤sizeof来计算数组长度的:
// 整型数组
int a[]={1,2,3,4,5};
int length =sizeof(a)/sizeof(a[0);
printf("%d",length);
sizeof是⼀个操作符,返回的是⼀个对象或类型所占的字节⼤⼩。
但是在字符数组中sizeof返回的往往不是我们需要的。
因为字符数组的往往需要⽐其他数组多占⼀个空间长度。⽐如⼀个有效字符串的长度为9,那么实际长度则为10,⽽第10个字符是'\0'。表⽰字符串结束。
使⽤strlen函数则会返回有效长度。
#include<stdio.h>
int myLen(const char*line)
{
int strlen =0;
while(line[strlen]!='\0')
{
strlen++;
}
return strlen;
}
int main(int argc,char const*argv[])
{
char line[]="hello";
printf("SIZEOF的长度= %d\n",sizeof(line));//6
printf("strlen的长度= %d",myLen(line));// 5
return0;
}
⼆、strcmp
原型:int strcmp(char const *s1, char const *s2, size_t len);;
功能:⽐较两个字符串。如果s1⼩于s2,strcmp函数返回⼀个⼩于零的值。如果s1⼤于s2,函数返回⼀个⼤于零的值。如果两个字符串相等,函数就返回零。
#include<stdio.h>
#include<string.h>
int mycmp(const char*c1,const char*c2)
{
while(*c1 ==*c2 &&*c1 =='\0')// 通过指针的⾃增来⽐较,同时判断是否有到了结束位置{
c1++;
c2++;
}
int result =*c1 -*c2;
return result ==0?0:(result >0)?1:-1;
}
int main(int argc,char const*argv[])
{
char char1[]="bb";
char char2[]="a";
printf("%d\n",strcmp(char1, char2));// 1
printf("%d",mycmp(char1, char2));// 1
return0;
}
三、strcat函数
原型:char *strcat(char *dst, char const *src);
功能:将⼀个字符串添加(连接)到另⼀个字符串的后⾯。
注意:src和dst的所指的内存区域不能重叠,如果发⽣重叠,其结果是未定义的。
#include<stdio.h>
#include<string.h>
char*mycat(char*des,const char*src)
{
char*temp = des;//定义临时指针指向⽬标字符数组
temp = des +strlen(des);//将⽬标字符串移⼊到结尾
while(*temp++=*src++)//通过指针⾃增实现赋值
*temp ='\0';//将⽬标字符串的结尾
return des;
/
/ char *temp = des;
// while (*temp != '\0')
// {
// temp++;
// }
// while ((*temp++ = *src++))
// *temp = '\0';
// return des;
}
int main(int argc,char const*argv[])
{
/
* code */
char c1[]="hello";
char c2[]="world";
printf("%s\n",mycat(c1, c2));//helloworld
return0;
四、strcpy
原型:char *strcpy(char *dst, char const *src);
功能:将参数src字符串复制到dst参数中。如果参数src和dst在内存中出现重叠,其结果是未定义的。由于dst参数将进⾏修改,所以它必须是个字符数组或者是⼀个指向动态分配内存的数组的指针,不能使⽤字符串常量。返回参数dst的⼀份拷贝。
注意:
⽬标参数dst的以前内容将被覆盖并丢失。即使新的字符串⽐dst原先的内存更短,由于新字符串是以N
UL字符结尾,所以⽼字符串最后剩余的⼏个字符也会被有效的删除。如果字符串⽐数组长,多余的字符仍被复制,它们将覆盖原先存储于数组后⾯的内存空间的值。所以必须保证⽬标字符数组的空间⾜以容纳需要复制的字符串。
#include<stdio.h>
#include<string.h>
char*mycpy(char*dst,char*const restrict src)
{
int idx =0;
while(c2[idx])
{
dst[idx]= src[idx];
idx++;
}
dst[idx]='\0';
return dst;
}
int main(int argc,char const*argv[])
{
char c1[]="adcdee";
char c2[]="eeeeddddddddd";
printf("%s\n",strcpy(c1, c2));//eeeeddddddddd
printf("%s\n",mycpy(c1, c2));//eeeeddddddddd
return0;
}
五、strchr函数
原型:char *strchr(char const *str, int ch);
功能:在⼀个字符串中查⼀个特定字符。
注意:第2个参数是⼀个整型值。但是,它包含了⼀个字符值。strchr在字符串str中查字符ch第⼀次出现的位置,到后函数返回⼀个指向该位置的指针。如果该字符并不存在于str中,函数就返回⼀个NULL指针。strrchr的功能和strchr基本⼀致,只是它所返回的是⼀个指向字符串中该字符最后⼀次出现的位置(最右边那个)。
为了直观编程显⽰,第⼆个参数设成字符型
#include<stdio.h>
#include<string.h>
char*Strchr(char*dst,const char str) {
while(*dst !='\0')
{
if(*dst == str)
{
return dst;
}
dst++;
}
return NULL;
}
int main(int argc,char const*argv[]) {
char c1[]="hello";
char*p =strchr(c1,'l');
printf("%s\n", p);//llo
printf("%s\n",Strchr(c1,'l'));//llo return0;
}
// 暂时就总结这么多,以后补充
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论