如何手动实现C语言中的字符串操作
来源:互联网 发布:软件项目经理责任制 编辑:程序博客网 时间:2024/06/06 06:30
学了字符串操作,很多人也许学了大概知道怎么用,但是太久没用就忘了,恰恰这是找软件工程师或者嵌入式工程师以及C,C++相关的笔试面试必考的题目!接下来我们来看看如何手动实现这些相关的函数。
废话不多说,直接上代码:
#include<stdio.h>#include <stdlib.h>//字符串拷贝 char * strcpy(char * dest,const char *src) ;char * strncpy(char * dest,const char *src,size_t count) ; //字符串黏贴 char * strcat(char * dest, const char * src) ; char * strncat(char *dest, const char *src, size_t count) ;//字符串比较 int strcmp(const char * cs,const char * ct) ;//字符串查找 char * strchr(const char * s, int c) ;char * strrchr(const char * s, int c);//计算字符串有多少个字节 int strlen(const char * s);//将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。void * memset(void * s,int c,size_t count) ;//内存拷贝函数 void * memcpy(void * dest,const void *src,size_t count);//由src所指内存区域复制count个字节到dest所指内存区域。void * memmove(void * dest,const void *src,size_t count) ;//比较内存区域buf1和buf2的前count个字节。该函数是按字节比较的。 int memcmp(const void * cs,const void * ct,size_t count);int main(void){//定义一个字符串 char *str = "Hello world!";char *str1 = "hello world!";char *str2 = "yangyuanxin";char buffer[256];//将数组的256块存储区域清空 memset(buffer , 0 ,256) ;//将字符串str拷贝到buffer这个数组空间里去 strcpy(buffer , str);printf("buffer:\n%s\n",buffer);//比较字符串str与str1是否相同 if(strcmp(str,str1) == 0){printf("字符串比较相同!\n");}else{printf("字符串比较不同\n");}//将str1黏贴到buffer这个字符串的后面 strcat(buffer , str1);printf("buffer:\n%s\n",buffer);//计算字符串的大小 printf("len:%d %d %d\n",strlen(str1),strlen(str),strlen(buffer));//从前往后查找 printf("%s\n",strchr(str1 ,'o'));//从后往前查找 printf("%s\n",strrchr(str1 ,'d'));//由str2所指内存区域复制11个字节到buffer所指内存区域。memmove(buffer , str2 , 11) ;printf("%s\n",buffer);//拷贝,跟memmove差不多的 memcpy(buffer , str1 ,11);printf("%s\n",buffer);//内存比较if(memcmp(buffer , str2 ,11) == 0){printf("内存区域相同!\n");}else{printf("内存区域不同!\n");}return 0 ;}char * strcpy(char * dest,const char *src){char *tmp = dest;while ((*dest++ = *src++) != '\0') //判断拷贝有没有到伪0/* nothing */;return tmp;}char * strncpy(char * dest,const char *src,size_t count){char *tmp = dest;while (count) { //count指的是要拷贝多少个字节if ((*tmp = *src) != 0) src++;tmp++;count--;}return dest;}char * strcat(char * dest, const char * src){char *tmp = dest;while (*dest)dest++;while ((*dest++ = *src++) != '\0') //将src这个字符串黏贴到dest这个字符串的后面去;return tmp;}char * strncat(char *dest, const char *src, size_t count){char *tmp = dest;if (count) { //要黏贴多少个字节,这个接口比上面那个灵活while (*dest)dest++;while ((*dest++ = *src++) != 0) {if (--count == 0) {*dest = '\0';break;}}}return tmp;}int strcmp(const char * cs,const char * ct){register signed char __res;while (1) {if ((__res = *cs - *ct++) != 0 || !*cs++) //字符串比较break;}return __res;}char * strchr(const char * s, int c){for(; *s != (char) c; ++s) //从前往后查找字符串中有没有存在的字符if (*s == '\0')return NULL;return (char *) s;}char * strrchr(const char * s, int c){ const char *p = s + strlen(s); <span style="font-family: Arial, Helvetica, sans-serif;"></span> do { //从后往前查找 if (*p == (char)c) return (char *)p; } while (--p >= s); return NULL;}int strlen(const char * s) {const char *sc;for (sc = s; *sc != '\0'; ++sc) //计算字符串中有多少个字节/* nothing */;return sc - s;}
//清楚内存区域void * memset(void * s,int c,size_t count){char *xs = (char *) s;while (count--)*xs++ = c;return s;}//内存区域的拷贝void * memcpy(void * dest,const void *src,size_t count){char *tmp = (char *) dest, *s = (char *) src;while (count--)*tmp++ = *s++;return dest;}//类似上面那个void * memmove(void * dest,const void *src,size_t count){char *tmp, *s;if (dest <= src) {tmp = (char *) dest;s = (char *) src;while (count--)*tmp++ = *s++;}else {tmp = (char *) dest + count;s = (char *) src + count;while (count--)*--tmp = *--s;}return dest;}//内存区域比较,有点类似strcmpint memcmp(const void * cs,const void * ct,size_t count){const unsigned char *su1, *su2;int res = 0;for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)if ((res = *su1 - *su2) != 0)break;return res;}
运行结果:
慢慢去学着写,绝对让你笔试无压力!!!
0 0
- 如何手动实现C语言中的字符串操作
- c 语言中的字符串操作
- c 语言中的字符串操作
- C语言中的字符串操作
- C语言中的字符串操作
- 【C】C语言中的字符串操作函数
- 转贴 c语言中的字符串操作
- c语言中的字符串操作函数
- C语言实现字符串的操作
- 实现C语言字符串操作的库函数
- 实现C语言字符串操作的库函数
- 字符串的基本操作,c语言实现
- C语言模拟实现字符串操作函数
- 【面试中的】C语言实现字符串函数
- 模拟实现C语言中的字符串函数
- 去除字符串中的空格 C语言实现
- 字符串操作--c语言
- C语言字符串操作
- 进程通信:管道(pipe)和 unix域套接字(socketpair)区别
- wpa_supplicant & wpa_cli
- Swift学习之UITableView的实现以及滑动删除
- 运维基础-windows下安装jdk
- 了解的程序员越多,我越觉得程序员是一群有趣的人
- 如何手动实现C语言中的字符串操作
- OCDay2-NSString、常见错误、结构体为属性时的访问、对象访问变量与方法的方式、#pragma mark\
- ScrollView中嵌套ListView/ExpandableListView显示问题
- P14 (*) Duplicate the elements of a list.
- Ubuntu下wget Oracle JDK1.7
- 生成指定个数的随机码,同时包含大小写字母和数字【H3C笔试题】
- leveldb资料整理
- java异常处理<2>__笔记(18)
- 柔性数组