C语言字符串*作函数和常用的实现

发布时间:2022-06-26 15:15:40

C语言字符串*作有很多,字符中的函数和常用的实现有哪些呢?下面是小编特别为需要实现编程学习的朋友收集整理的,欢迎大家阅读!更多相关信息请关注相关栏目!

面试官很喜欢让求职者写一些常用库函数的实现,有很多是和字符串相关的,有一些是关于内存拷贝的。一般,常会让写的函数有以下几个:

C语言字符串*作函数和常用的实现

strcpy,strncpy,memcpy。

memset一般不会让去写,但这个函数也很有特点,有很多容易用错的地方。一并总结吧。字符串*作函数atof()将字符串转换成浮点数atoi()将字符串转换成整数atol()将字符串转换成长整型数gcvt()将浮点型数转换为字符串(四舍五入)strtod()将字符串转换成浮点数strtol()将字符串转换成长整型数strtoul()将字符串转换成无符号长整型数toascii()将整数转换成合法的ASCII码字符tolower()将大写字母转换为小写字母toupper()将小写字母转换为大写字母index()查找字符串并返回首次出现的位置rindex()查找字符串并返回最后一次出现的位置strcasecmp()判断字符串是否相等(忽略大小写)strcat()连接字符串strcmp()根据ASCII码比较字符串strcoll()根据环境变量LC_COLLATE来比较字符串strcpy()复制字符串strcspn()查找字符串并返回首次出现的位置strchr()查找字符串并返回首次出现该字符的地址strdup()复制字符串strlen()返回字符串长度strncasecmp()比较字符串的前n个字符strncat()拼接字符串(取前n个字符)strncpy()复制字符串(取前n个字符)strpbrk()定位字符串中第一个出现的指定字符strrchr()定位字符串中最后出现的指定字符strspn()返回从字符串开头连续包含特定字符的字符数目strstr()返回指定字符串第一次出现的地址strtok()字符串分割

1.strcpy

strcpy函数的原型是:

char*strcpy(char*dest,constchar*src)

strcpy的实现经常要注意的细节是:

(1)判断地址是否为空,个人感觉可以使用断言

(2)参数只有两个地址,没有拷贝的长度。拷贝到\0‘时就会终止,要保*最终dest末尾是\0。

(3)要保*目标字串的长度足够,能够容纳原串的长度。

(4)因为拷贝是dest会移动,而最终要返回的是拷贝后字符串的起始地址,因此要先保存dest的地址,便于最终返回。

在实现这一点时,有两种方法。char*temp=dest;拷贝时移动dest返回temp,或者拷贝时移动temp返回dest,不知道哪个是对的。感觉两个都是没有问题的

其中一种实现方式:

[cpp]viewplaincopychar*mystrcpy(char*dest,constchar*src)

{

assert(dest!=NULL&&src!=NULL);

char*temp=dest;

while((*temp++=*src++)!=\0)

{}

returndest;

}

2.strncpy

strncpy的功能和strcpy相似,只是它复制时多了一个终止条件。即是未遇到原串的\0’,如果已经复制了n个字符(n为提供的参数长度),复制同样会终止。

strcpy的实现要注意的细节也基本适用于strncpy的实现。

实现方式:

[cpp]viewplaincopychar*mystrncpy(char*dest,constchar*src,intlen)

{

assert(dest!=NULL&&src!=NULL);

char*temp=dest;

inti=0;

while(i++<len&&(*temp++=*src++)!=\0)

{}

if(*(--temp)!=\0)

*temp=\0;

returndest;

}

[cpp]viewplaincopy注意:刚开始我写strncpy的实现时,把while(i++<len&&(*temp++=*src++)!=\0)写成了while((*temp++=*src++)!=\0&&i++<len);导致最后多复制了一个字符,明白为什么吧。。

3.memcpy

memcpy和strncpy有些类似,但也有本质的不同。

(1)strncpy只能复制字符串,但memcpy对类型没有要求。

(2)strncpy有两个终止条件,memcpy只有一个终止条件,那就是复制n个字节。(n是memcpy的第三个参数)

(3)要特别注意目的地址和源地址重合的问题,拷贝前要加以判断。

(4)实现这个函数时一般要把原来的指针类型转换成char*,这样每次移动都是一个字节。

实现方式:(考虑了两个地址空间是否会有重叠)

看了C语言字符串*作函数和常用的实现还看了:
  • C语言中返回字符串函数的实现方法

    C语言中返回字符串函数的实现方法你知道吗?相信很多人都想了解,下面小编给大家介绍C语言中返回字符串函数的实现方法,欢迎阅读!有四种方式:1。使用堆空间,返回申请的堆地址,注意释放2。函数参数传递指针,返回该指针3。返回函数内定义的静态变量(...

  • C 语言中返回字符串函数的四种实现方法

    C语言中返回字符串函数的方法有很多种,不同的方法效果是不一样的。下面是小编为大家带来的C语言中返回字符串函数的方法,欢迎阅读。1。使用堆空间,返回申请的堆地址,注意释放2。函数参数传递指针,返回该指针3。返回函数内定义的静态变量(共享)4。...

  • C语言字符串处理函数

    C语言具有绘图能力强,可移植*,并具备很强的数据处理能力。那么大家知道C语言字符串处理函数是什么呢?下面一起来看看!C语言提供了丰富的字符串处理函数,例如字符串的输入、输出、合并、修改、比较、转换、复制、搜索等,使用这些现成的函数可大大减轻...

  • C语言的字符串输出puts()函数

    puts()函数很容易用,只需把字符串地址作作为参数传递给它就可以了。下面我们一起来学习一下吧!puts()函数有两个特点:puts()在显示字符串时会自动在其末尾添加一个换行符。puts()遇到空字符时就停止输出,所以必须确保有空字符。下...

  • C语言的字符串处理函数strlen()

    C库提供了多个字符串处理函数,ANSIC把这些函数的原型放在string.h头文件中。其中最常用的有strlen()、strcat()、strcmp()、strncmp()、strcpy()和strncpy()。另外还有sprintf(),...