在很多面试及笔试中,都会有字符串的操作,有的甚至不允许使用C函数库中的函数,所使用函数都需要自己编写。那么就有必要针对字符串函数的实现,进行一个讲解。
首先:
将详细讲解在字符串函数实现中常用的语句
*str++
实际上是先使用*str,再str = str+1;这句话经常出现。比如计算字符串长度int StrLen(char *str) { if (NULL == str) exit(0); int length = 0; while(*str++) { length++; } return length; }
假如我们不使用*str++这个语句,那么必然要引入i,
int StrLen(char *str) { int length = 0,i; for (i = 0; *(str + i) != '\0'; i++) { length++; ; } return length; }
这样就造成了语句的冗余,尤其在后面的字符串比较及其他更复杂操作,*str++的方便性更能体现。
其次:
1.字符串长度函数
如上已经给出
2.字符串比较函数
3.字符串复制函数
4.字符串连接函数
对于这些函数我将会在稍后将完整程序列出。
头文件 StrSelf.h
#ifndef _STR_SELF_ #define _STR_SELF_ #include <stdlib.h> #include<stdio.h> int StrLen(char *str); int StrCmp(char *str1, char *str2); char* StrCpy(char *StrDst, char *StrSrc); char * StrCat(char *StrDst,char *StrSrc); #endif
函数实现文件StrSelf.cpp#include "StrSelf.h" int StrLen(char *str) { if (NULL == str) exit(0); int length = 0; while(*str++) { length++; } return length; } // 0 equal ,< 0 less,>0 larger int StrCmp(char *str1, char *str2) { if (NULL == str1 || NULL == str2) exit(0); while(*str1 && *str2 &&(*str1 == *str2)) { str1++; str2++; } return *str1 - *str2; } char* StrCpy(char *StrDst, char *StrSrc) { if (NULL == StrDst || NULL == StrSrc) exit(0); char *address = StrDst; while(*StrSrc) { *StrDst++ = *StrSrc++; } *StrDst = '\0'; return address; } char * StrCat(char *StrDst,char *StrSrc) { char * address = StrDst; while(*StrDst) StrDst++; while(*StrSrc) { *StrDst++ = *StrSrc++; } *StrDst = '\0'; return address; }
部分测试文件#include<stdio.h> #include "StrSelf.h" #define MaxNumDstStr 20 int main(void) { char StrDst[100] = "i love"; char *StrSrc = "qin"; printf("strsrc is %s\n",StrSrc); printf("strdst is %s\n",StrDst); printf("strdst is %s\n",StrCat(StrDst, StrSrc)); return 0; }