基础函数的实现(strcpy,strcat, strcmp, atoi, itoa)
strcpy:
/********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值: * 返回目标串的地址。 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。 * 参数: * strDeatination * 目标串 * strSource * 源串 ***********************/ VERSION 1: char *strcpy(char *strDestination, const char *strSource); { assert(strDestination && strSource); char *cp=strDestination; while(*cp++ = *strSource++); return strDestination; } VERSION 2: char* strcpy(char * dst, const char * src) { char * cp = dst; while( *cp++ = *src++ ) ; /* Copy src over dst */ return( dst ); } VERSION 3: char *srcpy(char *dest,const char *source) { assert((dest!=NULL)&&(source!=NULL)); char *address = dest; while(*source!='\0') { *dest++=*source++; } *dest = '\0'; return address; } strcat: VERSION 1: char * strcat(char * dest, const char * src) { char *tmp = dest; while (*dest) dest++; while ((*dest++ = *src++) != '\0') ; return tmp; }
strcat()函数
不调用C++/C 的字符串库函数,请编写函数 strcat VC源码: char * __cdecl strcat (char * dst, const char * src) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */ } strcat()接受两个字符串参数。将第二个字符串的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串不改变。 strcmp: VERSION 1: int strcmp ( const char* src, const char* dst ) { int ret = 0 ; while( !(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else if ( ret > 0 ) ret = 1 ; return( ret ); } VERSION 2: int strcmp(const char *dest, const char *source) { assert((NULL != dest) && (NULL != source)); while (*dest && *source && (*dest == *source)) { dest ++; source ++; } return *dest - *source; /*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/ } VERSION 3: int strcmp(char *source, char *dest) { assert(source != NULL && dest != NULL); while(*source++==*dest++) { if(*source=='\0'&&*dest=='\0') return 0; } return -1; } itoa: #include "stdafx.h" #include <iostream> using namespace std; void itoa(int num,char str[] ) { int sign = num,i = 0,j = 0; char temp[11]; if(sign<0)//判断是否是一个负数 { num = -num; }; do { temp[i] = num%10+'0'; num/=10; i++; }while(num>0); if(sign<0) { temp[i++] = '-';//对于负数,要加以负号 } temp[i] = '\0'; i--; while(i>=0)//反向操作 { str[j] = temp[i]; j++; i--; } str[j] = '\0'; } atoi: int atoi(char s[]) { int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断 while(' '==s[i]||'\t'==s[i]) { i++; } sign = ('-'==s[i])?-1:1; if('-'==s[i]||'+'==s[i]) { i++; } while(s[i]!='\0') { sum = s[i]-'0'+sum*10; i++; } return sign*sum; } |