// StringAPI.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<math.h> #include<string.h> using namespace std; #define null NULL int strlen1(char *strDest); int strlen1(char* strDest) { return *strDest?1+strlen1(strDest+1):0; } int strlen2(char* p) { if(*p) return 1+strlen2(p+1); else return 0; } size_t _cdecl strlen3(char* strDest) { char* start = strDest; while(*strDest++); return (int)(strDest - start-1); } //----------------------------------------------- int __cdecl 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 ); } int strcmp1(const char* src, const char* dst) { int ret = 0; while(*src || *dst) { int result = *src - *dst; if(result == 0) { src++; dst++; continue; } if(result > 0) { ret = 1; break; } else { ret = -1; break; } } return ret; } int strcmp2(const char* src, const char* dst) { int result = *src - *dst; if(result == 0) { return strcmp2(++src, ++dst); } if(result > 0) return 1; if(result < 0) return -1; } //------------------------------------------------------ char * __cdecl strstr1(const char * str1, const char * str2)//首次匹配的子字符串的开始位置 { char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return((char *)str1); while (*cp) { s1 = cp; s2 = (char *) str2; while ( *s1 && *s2 && !(*s1-*s2) ) s1++, s2++; if (!*s2) return(cp); cp++; } return(NULL); } char * _cdecl strstr2(const char* str1, const char* str2)//首次匹配的子字符串的最后位置 { if(!*str2) return (char*)str1; if(!*str1) return NULL; int result = *str1 - *str2; if(result == 0) return strstr2(++str1, ++str2); else return strstr2(++str1, str2); } //--------------------------------------------------------- //Compare the first n chars of the two string int __cdecl strncmp1(const char * first, const char * last, size_t count) { if (!count) return(0); while (--count && *first && *first == *last) { first++; last++; } return( *(unsigned char *)first - *(unsigned char *)last ); } int _cdecl strncmp2(const char* first, const char* last, size_t count) { while(--count && *first && !(*(first++) - *(last++))); return (*first - *last); } //------------------------------------------- char* strupr1(char* str) { char* dst = str; char ret[10]; int i = 0; int j = 0; int MIN = (int)'a'; int MAX = (int)'z'; while(*str && *str>=MIN && *str<=MAX) { ret[i++] = (char)((int)(*(str+j++)) - 32); } strcpy(str, ret); return str; } char* strupr2(char* str) { char* dst = str; char ret[10]; return null; } //-------------------------------------------- char * __cdecl strcat1 ( 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 */ } int _tmain(int argc, _TCHAR* argv[]) { int _b; char a[10]; a[0] = 'a'; a[1] = 'b'; //cout<<sizeof(a)<<endl; char *p = "hello"; cout<<*(p+5)<<endl; cout<<strlen2(p)<<endl; cout<<strlen3(p)<<endl; cout<<strlen1(p)<<endl; cout<<strlen(p)<<endl; cout<<"***********************"<<endl; char * p1 = "52"; char * p2 = "2131527"; cout<<abs(*p1 - *p2)<<endl; //unsigned char的两个字符做减法运算,结果是正整数(ASCII的运算) cout<<strcmp(p1, p2)<<endl; cout<<strcmp1(p1, p2)<<endl; cout<<strcmp2(p1, p2)<<endl; cout<<"*********************"<<endl; char * c = strstr1(p2, p1); if(c != NULL) cout<<*strstr1(p2, p1)<<endl; cout<<*strstr2(p2, p1)<<endl; cout<<"***********************"<<endl; char * p3 = "2345"; char * p4 = "23679"; cout<<strncmp1(p3, p4, 3)<<endl; cout<<strncmp2(p3, p4, 3)<<endl; cout<<"************************"<<endl; char* p5 = "abc"; //cout<<strupr1(p5)<<endl; cout<<p5<<endl; cout<<"strcpy()*********************************"<<endl; cout<<strcat(p1, p2)<<endl; int b; cin>>b; return 0; }