1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【C语言】str类与men库函数的实现(如:strcpy strcmp strstr strcat memmove memcpy)

【C语言】str类与men库函数的实现(如:strcpy strcmp strstr strcat memmove memcpy)

时间:2019-10-14 17:11:46

相关推荐

【C语言】str类与men库函数的实现(如:strcpy strcmp strstr strcat memmove memcpy)

/hanjing_1995/article/details/51539583

strcpy

拷贝源字符串到子字符串,包括‘\0’。

代码实现:

[cpp]view plaincopychar*strcpy(char*dst,constchar*src){assert(src);char*ret=dst;while(*src){*dst=*src;src++;dst++;}*dst='\0';returnret;}

2.strncpy:

strncpy与strcpy之间差别在于,strcpy将源字符串全部拷贝到新的字符串中,而strncpy拷贝长度由自己确定。

代码实现:

[cpp]view plaincopychar*strncpy(char*dst,constchar*src,intcount){assert(dst);assert(src);char*ret=dst;while(count--){*dst=*src;dst++;src++;}*dst='\0';returnret;}

3.strcat:

strcat作用是链接字符串,即:

str1: helstr2:lo则链接后为hello。

代码实现:

[cpp]view plaincopychar*strcat(char*dst,char*src){assert(dst);assert(src);char*ret=src;while(*src){src++;}while(*dst){*src=*dst;dst++;src++;}*dst='\0';returnret;}

4.strcmp:

strcmp用来比较字符串长度。

对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

如果两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”,还要特别注意:小写字母比大写字母“大”。

返回值:

(1)字符串1=字符串2,返回0

(2)字符串1>字符串2,返回一个正整数

(3)字符串1<字符串2,返回一个负整数。

代码实现:

[cpp]view plaincopyintstrcmp(constchar*dst,constchar*src){assert(dst);assert(src);while(*src&&*dst){if(*src==*dst){src++;dst++;}else{return*src-*dst-'\0';}}return*src-*dst-'\0';}

5.strncmp:

与strcmp区别在于:strcmp是针对整个字符串而言,而strncmp针对指定长度。

但是要注意,如果count比两者字符串长度都短的话,则要跳出循环结束。当长度大于两者字符串长度时,仍然可以比较出是否相等。

代码实现:

[cpp]view plaincopyintstrncmp(constchar*dst,constchar*src,size_tcount){assert(dst);assert(src);while(count--&&*src&&*dst){if(*src==*dst){src++;dst++;}else{return*src-*dst-'\0';}}return*src-*dst-'\0';}

6.strstr:

寻找子字符串,我们在源字符串设置一个指针,用做来当此时确实满足是子串标志原串的位置,如下面的p。而s1,s2分别用作来遍历。

代码实现:

[cpp]view plaincopychar*strstr(constchar*dst,constchar*src){assert(dst);assert(src);char*s1=dst;char*p=src;char*s2=p;while(*s2){s1=dst;s2=p;while(*s2&&*s1){if(*s2==*s1){s1++;s2++;}else{p++;break;}}if(*s1=='\0'){returnp;}}returnNULL;}

7.memcpy:

strcpy完成字符串的拷贝,而对于非字符串类的,却要用memcpy完成内存拷贝。

代码实现:

[cpp]view plaincopyvoid*memcpy(void*dst,constvoid*src,size_tcount){assert(dst);assert(src);char*dst_=(char*)dst;char*src_=(char*)src;while(count--){*dst_++=*src_++;}//即使此时count不为0,但是当我们将原数拷贝到新的数据结束,那也要结束程序。*dst_='\0';//必须加上结束标志,否则会乱码returndst;}

8.memmove:

memmove在于它可解决内存重叠问题。

如:将1,2,3,4,5,6,7,8中的1,2,3,4移动到3,4,5,6位置。那么则仍然按照memcpy则会,将1移动到3处,2移动到4处,再准备移动3时发现此时的3已经由于被移动到此处的1覆盖而丢失。4同理。这就是memmove的优势所在。我们分情况即可解决。

代码实现:

[cpp]view plaincopyvoidmemmove(void*dst,constvoid*src,size_tcount){assert(dst);assert(src);char*dst_=(char*)dst;char*src_=(char*)src;if(dst_>src_&&dst<dst_+count){while(count--){*(dst_+count)=*(src_+count);dst_++;src_++;}}else{while(count--){*dst_=*src_;dst_++;src_++;}}*dst_='\0';returndst;}

本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184./10730184/1765040

个人分类:C语言

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。