|
本帖最后由 VBProFan 于 2010-8-16 17:03 编辑
from:http://www.yqshare.com/string-h-fuction.html
-
- 001 #include<stdio.h>
- 002 char* strcpy(char* dest,const char* src); //字符串拷贝
- 003 char* strcat(char* dest,const char* src); //字符串连接,返回dest字符串
- 004 char* strncat(char* dest, const char* src, int size);//把src前n个字符串连接到dest,返回dest字符串
- 005 int strcmp(const char* src1,const char* src2); //字符串比较 返回值: 1:> 0:= -1<
- 006 int strncmp(const char* src,const char* dst,int size); //dst前n个字符和src比较返回值: 1:> 0:= -1<
- 007 int strlen(const char* src); //返回字符串长度
- 008 char* strchr(const char* src, int ch); //字符ch在字符串第一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针
- 009 char* strrchr(const char* src, int ch); //字符ch在字符串最后一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针
- 010 char* strstr(const char* src, const char* sub); //字符串sub在字符串第一次出现的位置,返回出现字符串sub位置开始到字符串结束位置的指针
- 011 //memery copy operate function==================//
- 012 void* memcpy(void* dest,const void* src,unsigned int size); //把src的内容拷到dest内存里去,并返回dest指向的内存地址
- 013 void* memset(void* dst, int ch, unsigned int size); //把dst内存中的size大小用使用ch来初始化,并返回dest指向的内存地址
- 014 int memcmp(const void* src1, const void* src2, unsigned int size); //比较内存中src1与src2中的前size 个字符是否相等,1:> 0:= -1< (see strncmp(const char*,const char*,unsigned int))
- 015 void* memchr(const void* dst, int ch, unsigned int size); //在内存中的某一范围内,查找特定的字符ch,并返回指向ch的指针
- 016 void* memmove(void* dst, const void* src, unsigned int size); //memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些.返回指向dest的指针
- 017 //memery copy operate function==================//
- 018
- 019 int main()
- 020 {
- 021 // printf("the string len=%d\n",strlen("helloWorld"));
- 022
- 023 // char dest[20];
- 024 // printf("the string is=%s\n",strcpy(dest,"helloWorld"));
- 025 // char dest[30]="hello--";
- 026 // printf("after connect sub string is=%s\n",strcat(dest,"world"));
- 027 // char dest[30]="hello--";
- 028 // printf("after connect sub string is=%s\n",strncat(dest,"world_programe",4));
- 029
- 030 // printf("the string compare result is=%d\n",strcmp("hello","aello"));
- 031 // printf("the string compare result is=%d\n",strncmp("hello","hello_good",5));
- 032 // printf("the char appear position is=%s\n",strchr("hello-r-es-d",'-'));
- 033 // printf("the char appear position is=%s\n",strrchr("hel*lo-r*-e*s-d",'*'));
- 034
- 035 // printf("the sub string is=%s\n",strstr("hello_world","lo"));
- 036 char dest[20];
- 037 // printf("the sub string is=%s\n",memcpy(dest,"hello..111",sizeof(dest)));
- 038 printf("the sub string is=%s\n",memset(dest,'0',sizeof(dest)));
- 039
- 040 return 0;
- 041 }
- 042 //=========================================================//
- 043 int strlen(const char* src)
- 044 {
- 045 const char* p=src;
- 046 while(*p++!='\0');
- 047 return p-src-1;
- 048 }
- 049 //=========================================================//
- 050 char* strcpy(char* dest,const char* src)
- 051 {
- 052 if(dest&&src)
- 053 {
- 054 int i=0;
- 055 while((*(dest+i)=*(src+i))!='\0') i++;
- 056 *(dest+i)='\0';
- 057 // return dest;
- 058 }
- 059 return dest;
- 060 }
- 061 //=========================================================//
- 062 char* strcat(char* dest,const char* src)
- 063 {
- 064 if(dest&&src)
- 065 {
- 066 int len=strlen(dest);
- 067 // printf("len=%d\n",len);
- 068 int i=0;
- 069 while((*(dest+len+i)=*(src+i))!='\0') i++;
- 070 *(dest+len+i)='\0';
- 071 }
- 072 return dest;
- 073 }
- 074 //=========================================================//
- 075 char* strncat(char* dest, const char* src, int size)
- 076 {
- 077 if(dest&&src)
- 078 {
- 079 int len=strlen(dest);
- 080 int i=0;
- 081 while((i<size)&&((*(dest+len+i)=*(src+i))!='\0')) i++;
- 082 }
- 083 return dest;
- 084 }
- 085 //=========================================================//
- 086 int strcmp(const char* src1,const char* src2)
- 087 {
- 088 int equal;
- 089 int i=0;
- 090 while(!(equal=*(unsigned char*)(src1+i)-*(unsigned char*)(src2+i))&&(*(src1+i))&&(*(src2+i)))
- 091 i++;
- 092 if(equal<0) return -1;
- 093 else if(equal>0) return 1;
- 094 else return 0;
- 095 }
- 096 //=================比较两个字符串前size 个字符串是否相等==========================//
- 097 int strncmp(const char* src1,const char* src2,int size)
- 098 {
- 099 int equal;
- 100 int i=0;
- 101 while((i<size)&&!(equal=*(unsigned char*)(src1+i)-*(unsigned char*)(src2+i))&&(*(src1+i))&&(*(src2+i)))
- 102 i++;
- 103 if(equal<0) return -1;
- 104 else if(equal>0) return 1;
- 105 else return 0;
- 106 }
- 107 //=========================================================//
- 108 char* strchr(const char* src, int ch)
- 109 {
- 110 int i=0;
- 111 while(*(src+i)&&(*(src+i)!=ch)) i++;
- 112 return (char*)(src+i);
- 113 }
- 114 //=========================================================//
- 115 char* strrchr(const char* src, int ch)
- 116 {
- 117 int len=strlen(src);
- 118 int i=0;
- 119 while(i<len&&(*(src+len-i)!=ch)) i++;
- 120 return (char*)(src+(len-i));
- 121 }
- 122 //=========================================================//
- 123 char* strstr(const char* src, const char* sub)
- 124 {
- 125 if(src&&sub)
- 126 {
- 127 int subLen=strlen(sub);
- 128 int srcLen=strlen(src);
- 129 int nomatch=1;
- 130 int fds=srcLen-subLen+1;
- 131 int i=0;
- 132 if(fds>0) //find counts in the string
- 133 while((nomatch=strncmp(src+i,sub,subLen))&&fds--)//把当前src的指针往后推,直到找到与sub指针相同为止
- 134 i++;
- 135 if(nomatch)
- 136 return 0;
- 137 else
- 138 return (char*)(src+i);
- 139 }
- 140 return 0;
- 141 }
- 142 //====================memory operate=====================================//
- 143 //====================memory operate=====================================//
- 144 void* memcpy(void* dest,const void* src,unsigned int size)
- 145 {
- 146 if(dest&&src&&size>0)
- 147 {
- 148 int i=0;
- 149 unsigned char* p=(unsigned char*)dest;
- 150 unsigned char* q=(unsigned char*)src;
- 151 while((i<size)&&(*(p+i)=*(q+i)))
- 152 i++;
- 153 return dest;
- 154 }
- 155 return 0;
- 156 }
- 157 //=========================================================//
- 158 void* memset(void* dst, int ch, unsigned int size)
- 159 {
- 160 int i=0;
- 161 unsigned char* p=(unsigned char*)dst;
- 162 while((i<size)&&(*(p+i)=ch))
- 163 i++;
- 164 return dst;
- 165 }
- 166 //=========================================================//
- 167 int memcmp(const void* src1, const void* src2, unsigned int size)
- 168 {
- 169 }
- 170 //=========================================================//
- 171 void* memchr(const void* dst, int ch, unsigned int size)
- 172 {
- 173 }
- 174 void* memmove(void* dst, const void* src, unsigned int count)
- 175 {
- 176 void * ret = dst;
- 177 if (dst <= src || (char *)dst >= ((char *)src + count))
- 178 {
- 179 while (count--)
- 180 {
- 181 *(char *)dst = *(char *)src;
- 182 dst = (char *)dst + 1;
- 183 src = (char *)src + 1;
- 184 }
- 185 }
- 186 else
- 187 {
- 188 dst = (char *)dst + count - 1;
- 189 src = (char *)src + count - 1;
- 190 while (count--)
- 191 {
- 192 *(char *)dst = *(char *)src;
- 193 dst = (char *)dst - 1;
- 194 src = (char *)src - 1;
- 195 }
- 196 }
- 197 return(ret);
- 198
- 199 }
复制代码 |
|