字符串操作&内存操作
来源:互联网 发布:巨人网络 刘伟 编辑:程序博客网 时间:2024/04/26 11:28
1、strcpy
char * strcpy( char *strDest, const char *strSrc ) { if(strDest == strSrc) { return strDest; } assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0' ); return address; }
2、strncpy
char *strncpy(char *strDes, const char *strSrc, unsigned int count) { assert(strDes != NULL && strSrc != NULL); char *address = strDes; while (count-- && *strSrc != '\0') *strDes++ = *strSrc++; *strDes = '\0'; return address; }
3、strcmp
int strcmp(const char *s, const char *t) { assert(s != NULL && t != NULL); while (*s && *t && *s == *t) { ++ s; ++ t; } return (*s - *t); }
4、strcat
char *strcat(char *strDes, const char *strSrc) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while (*strDes != '\0') ++ strDes; while ((*strDes ++ = *strSrc ++) != '\0') NULL; return address; }
5、strlen
int strlen(const char *str) { assert(str != NULL); int len = 0; while (*str ++ != '\0') ++ len; return len; }
6、strstr
char *strstr(const char *strSrc, const char *str) { assert(strSrc != NULL && str != NULL); const char *s = strSrc; const char *t = str; for (; *strSrc != '\0'; ++ strSrc) { for (s = strSrc, t = str; *t != '\0' && *s == *t; ++s, ++t) NULL; if (*t == '\0') return (char *) strSrc; } return NULL; }
7、strncat
char *strncat(char *strDes, const char *strSrc, unsigned int count) { assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while (*strDes != '\0') ++ strDes; while (count -- && *strSrc != '\0' ) *strDes ++ = *strSrc ++; *strDes = '\0'; return address; }
8、strncmp
int strncmp(const char *s, const char *t, unsigned int count) { assert((s != NULL) && (t != NULL)); while (*s && *t && *s == *t && count --) { ++ s; ++ t; } return (*s - *t); }
9、memcpy
void *memcpy(void *dest, const void *src, unsigned int count) { assert((dest != NULL) && (src != NULL)); void *address = dest; while (count --) { *(char *) dest = *(char *) src; dest = (char *) dest + 1; src = (char *) src + 1; } return address; }
10、memccpy
void *memccpy(void *dest, const void *src, int c, unsigned int count) { assert((dest != NULL) && (src != NULL)); while (count --) { *(char *) dest = *(char *) src; if (* (char *) src == (char) c) return ((char *)dest + 1); dest = (char *) dest + 1; src = (char *) src + 1; } return NULL; }
11、memcmp
int memcmp(const void *s, const void *t, unsigned int count) { assert((s != NULL) && (t != NULL)); while (*(char *) s && *(char *) t && *(char *) s == *(char *) t && count --) { s = (char *) s + 1; t = (char *) t + 1; } return (*(char *) s - *(char *) t); }
12、memmove
//@big: //要处理src和dest有重叠的情况,不是从尾巴开始移动就没问题了。 //一种情况是dest小于src有重叠,这个时候要从头开始移动, //另一种是dest大于src有重叠,这个时候要从尾开始移动。 void *memmove(void *dest, const void *src, unsigned int count) { assert(dest != NULL && src != NULL); char* pdest = (char*) dest; char* psrc = (char*) src; //pdest在psrc后面,且两者距离小于count时,从尾部开始移动. 其他情况从头部开始移动 if (pdest > psrc && pdest - psrc < count) { while (count--) { *(pdest + count) = *(psrc + count); } } else { while (count--) { *pdest++ = *psrc++; } } return dest; }
13、memset
void *memset(void *str, int c, unsigned int count) { assert(str != NULL); void *s = str; while (count --) { *(char *) s = (char) c; s = (char *) s + 1; } return str; }
14、atoi
//代码自己所写,不对地方请及时指正,谢谢! //inf用来标记作为判断是否越界 //atoiFlag作为是否是正确结果的返回值 const __int64 inf = (0x7fffffff); int atoiFlag; int atoi(const char* ch) { ASSERT(ch != NULL); atoiFlag = false; while (*ch == ' ' || *ch == '\t') ch ++; int isMinus = 1; if (*ch == '-') { isMinus = -1; ch ++; } else if (*ch == '+') { ch ++; } //判断非法 if (!(*ch <= '9' && *ch >= '0')) return 0; __int64 ans = 0; while (*ch && *ch <= '9' && *ch >= '0') { ans *= 10; ans += *ch - '0'; //判断越界 if (ans > inf) { return inf; } ch ++; } ans *= isMinus; atoiFlag = true; return (int)ans; } //如何使用 int main() { char a[100]; while (scanf("%s", a) != EOF) { int ans = atoi(a); if (atoiFlag) printf("%d\n", ans); else if (ans == inf) puts("The data of crossing the line"); else puts("Not is a integer"); } return 0; } </span>
15、itoa
#include <stdlib.h> #include <stdio.h> char *myitoa(int num,char *str,int radix); int main() { int number = -123456; char string[25]; myitoa(number, string, 16); printf("integer = %d string = %s\n", number, string); return 0; } /* 实现itoa函数的源代码 */ char *myitoa(int num,char *str,int radix) { /* 索引表 */ char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; unsigned unum; /* 中间变量 */ int i=0,j,k; /* 确定unum的值 */ if(radix==10&&num<0) /* 十进制负数 */ { unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num; /* 其他情况 */ /* 逆序 */ do { str[i++]=index[unum%(unsigned)radix]; unum/=radix; }while(unum); str[i]='\0'; /* 转换 */ if(str[0]=='-') k=1; /* 十进制负数 */ else k=0; /* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */ char temp; for(j=k;j<=(i-k-1)/2.0;j++) { temp=str[j]; str[j]=str[i-j-1]; str[i-j-1]=temp; } return str; }
0 0
- 字符串操作&内存操作
- 字符串和内存操作函数
- 内存与字符串操作函数
- 字符串以及内存操作相关函数
- 字符串以及内存操作相关函数
- 内存及字符串操作篇(Linux c)
- 一些字符串及内存操作的函数
- Linux C 函数 内存及字符串操作
- 字符串以及内存操作相关函数
- 字符串以及内存操作相关函数
- 几个字符串和内存操作函数
- 字符串基本操作以及内存函数
- 格式 内存四区 操作字符串
- 字符串操作与一级指针内存模型
- 字符串操作和一级指针内存模型
- C语言内存操作函数和一般字符串操作函数
- memset函数 及 内存操作函数 及 字符串操作函数
- 内存操作
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。 @ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- poj 1129
- //动态函数调用实现下列操作,输入2个数以及操作符计算结果。@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- JavaScript判断浏览器类型及版本
- Headmaster's Headache - UVa 10817 状压dp
- 字符串操作&内存操作
- 如何绑定数据联系并操作
- CSS实现强制换行-------Day 78
- ZOJ-1217
- 工业以太网与普通以太网
- 1.2 C++变量和数据类型 (Variables and Data types )
- OC (四)
- 面试准备
- C语言-----回调函数(新手写题望多指教)