自己实现字符串的各个函数功能
2016-07-16 13:00
211 查看
在对字符串进行操作的时候,我们常常会用到字符串的相关函数,如strcmp(),strncmp(),strlen(),strcpy(),strncpy(),strcat(),strncat()函数,今天我就针对这些函数,进行使用讲解以及如何自己编写相应的程序来实现其功能。
自己编写的实现strcmp()相同功能的函数my_strcmp():
头文件:string.h
返回值:若字符串s1和字符串s2前n个字符相同,则返回0;
自己编写的实现strncmp()相同功能的函数my_strncmp():
功能:把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间.
返回值:char * 类型,即指向dest的指针。
注:src和dest所指向的内存地址不可以重叠,且dest要有足够的空间来存放src的字符串。
自己编写函数my_strcpy()以实现跟strcpy()相同的函数功能:
#include <stdio.h>
char *my_strcpy(char *dest,char *src)
{
char *temp = dest;
while(*src != '\0')
{
*temp = *src;
temp ++;
src ++;
}
*temp = '\0';
return dest;
}
int main()
{
char dest[20] = "hello world!";
char src[20] = "hi!";
char *res = my_strcpy(dest,src);
printf("The copied string is:%s\n",res);
return 0;
}
调试结果为:
The copied string is:hi!
strcpy()和strncpy()的区别:
strcpy()只是复制字符串,但不限制复制的数量,很容易造成缓冲溢出,而strncpy()则相对安全一点。
strncpy()能够选择一段字符输出,strcpy()不能。
字符串长度函数:strlen()
size_t strlen(const char *s)
自己编写my_strlen()函数以实现strlen()的相应的功能;
调试结果为:
调试结果为:
2.char*strncpy(char
*dest,construction char *src,size_t n)
字符串比较函数:strcmp()&&strncmp()
1. int strcmp(const char *s1, const char *s2)
头文件:string.h
功能:比较字符串(区分大小写)返回值:若字符串s1和字符串s2相同,则返回0;
若字符串s1大于字符串s2,则返回正数;
若字符串s1小于字符串s2,则返回负数。
注:是使用二进制的方式进行比较,而且字符串大小的比较是一ASCII码值进行比较的,首先s1和s2的第一个字符进行比较,若差值为0则继续比较,否则就讲差值返回。只可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。自己编写的实现strcmp()相同功能的函数my_strcmp():
<span style="font-size:18px;"><strong>#include <stdio.h> int my_strcmp(const char * s1,const char * s2) { while(*s1 != '\0') { if((*s1 - *s2) == 0) { s1 ++; s2 ++; } else { if((*s1 - *s2) > 0) { return 1; break; } else { return -1; break; } } } if(*s2 != '\0') { return -1; } return 0; } int main() { int res; char *s1 = "hello"; char *s2 = "hello"; res = my_strcmp(s1,s2); switch(res) { case -1: printf("s1 < s2\n"); break; case 0: printf("s1 = s2\n"); break; case 1: printf("s1 > s2\n"); break; default: printf("Error!"); } return 0; }</strong></span>上面的函数调试结果为:
s1 = s2这个程序主函数里进行比较的字符串是我自己设定的,大家也可以自己添加,从scanf录入。
2. int strncmp(const char *s1, const char *s2, size_t n)
头文件:string.h
功能:比较指定比较数目前n个字符串(区分大小写)
返回值:若字符串s1和字符串s2前n个字符相同,则返回0;
若字符串s1前n个字符大于字符串s2前n个字符,则返回正数;
若字符串s1前n个字符小于字符串s2前n个字符,则返回负数。
自己编写的实现strncmp()相同功能的函数my_strncmp():<span style="font-size:18px;">#include <stdio.h> int my_strncmp(const char * s1,const char * s2,size_t n) { int i; for(i = 0;i < n;i ++) { if(*s1 == *s2) { s1 ++; s2 ++; } else { if(*s1 > *s2) { return 1; break; } else { return -1; break; } } } return 0; } int main() { int res; int n = 2; char *s1 = "hi!"; char *s2 = "hello world!"; res = my_strncmp(s1,s2,n); switch(res) { case -1: printf("s1 < s2.\n"); break; case 0: printf("s1 = s2.\n"); break; case 1: printf("s1 > s2.\n"); break; default: printf("Error!"); } return 0; }</span>调试结果如下:
s1 > s2.
字符串拷贝函数:strcpy()&&strcncpy()
1.char *strcpy(char *dest,const char *src)
头文件:string.h功能:把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间.
返回值:char * 类型,即指向dest的指针。
注:src和dest所指向的内存地址不可以重叠,且dest要有足够的空间来存放src的字符串。
自己编写函数my_strcpy()以实现跟strcpy()相同的函数功能:
#include <stdio.h>
char *my_strcpy(char *dest,char *src)
{
char *temp = dest;
while(*src != '\0')
{
*temp = *src;
temp ++;
src ++;
}
*temp = '\0';
return dest;
}
int main()
{
char dest[20] = "hello world!";
char src[20] = "hi!";
char *res = my_strcpy(dest,src);
printf("The copied string is:%s\n",res);
return 0;
}
调试结果为:
The copied string is:hi!
2.char *strncpy(char *dest, const char *src, size_t n)
头文件:string.h功能:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中
返回值:dest
自己编写程序my_strncpy()以实现与strncpy()相同的函数功能:
#include <stdio.h> #define MAX_SIZE 1024 char * my_strncpy(char * dest,char * src,size_t n) { int i; char *temp = dest; for(i = 0;i < n; i ++) { *temp = *src; temp ++; src ++; } return dest; } int main() { int n = 3; char dest[MAX_SIZE] = "hi Nancy!"; char src[MAX_SIZE] = "hello world!"; char *res = my_strncpy(dest,src,n); printf("The copied string is:%s\n",dest); return 0; }调试结果为:
The copied string is:helNancy!
strcpy()和strncpy()的区别:
strcpy()只是复制字符串,但不限制复制的数量,很容易造成缓冲溢出,而strncpy()则相对安全一点。
strncpy()能够选择一段字符输出,strcpy()不能。
字符串长度函数:strlen()
size_t strlen(const char *s)
头文件:string.h
功能:计算字符串的长度返回值:字符串的长度
注:字符串长度不包括结束符'\0'。自己编写my_strlen()函数以实现strlen()的相应的功能;
#include <stdio.h> #define MAX_SIZE 1024 size_t my_strlen(const char *src) { int len = 0; while(*src != '\0') { len ++; src ++; } return len; } int main() { int len; char src[MAX_SIZE] = "hello world!"; len = my_strlen(src); printf("The lenght of the string is:%d.\n",len); return 0; }
调试结果为:
The lenght of the string is:12.
字符串连接函数:strcat() && strncat()
1.char *strcat(char *dest,const char *src)
头文件:string.h
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。
返回值:连接后的字符串dest。
自己编写的my_strcat()函数以实现strcat()的功能:
#include <stdio.h> #define MAX_SIZE 1024 char *my_strcat(char *dest,char *src) { char *temp = dest; while(*temp != '\0') { temp ++; } while(*src != '\0') { *temp = *src; temp ++; src ++; } return dest; } int main() { char dest[MAX_SIZE] = "hello world!"; char src[MAX_SIZE] = "hi!"; char *res = my_strcat(dest,src); printf("The linked string is:%s\n",dest); return 0; }
调试结果为:
The linked string is:hello world!hi!
2.char *strncat(char *dest,const char *src,size_t n)
头文件:string.h
功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0'),再追加'\0'。
返回值:指向dest的指针。
自己编写的my_strncat()函数以实现strncat()的功能:
#include <stdio.h> #define MAX_SIZE 1024 char * my_strncat(char *dest,char *src,size_t n) { int i; char *temp = dest; while(*temp != '\0') { temp ++; } for(i = 0;i < n;i ++) { *temp = *src; temp ++; src ++; } *temp = '\0'; return dest; } int main() { int n = 4; char dest[MAX_SIZE] = "hello world!"; char src[MAX_SIZE] = "hi Nancy!"; char *res = my_strncat(dest,src,n); printf("The linked string is:%s\n",dest); return 0; }
调试结果为:
The linked string is:hello world!hi N
2.char*strncpy(char
*dest,construction char *src,size_t n)
相关文章推荐
- 用ant生成jbpm的数据库表
- hive 中日志的存放位置
- Java断点续传实现原理很简单
- 自定义ActionProvider ToolBar 自定义Menu小红点
- Android 微信支付接入
- 自我介绍
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】08-基本运算
- 白话解释 对称加密算法 VS 非对称加密算法 OSI模型,TLS/SSL 及 HTTPS
- Machine Learning week1
- 【小松教你手游开发】【系统模块开发】unity 数据储存到本地为二进制文件(聊天记录本地储存)
- RxAndroid用法
- vim与系统粘贴板交互
- bzoj 1596 [Usaco2008 Jan]电话网络
- javax.servlet.ServletContextListener
- 分块矩阵的逆矩阵的公式记忆方法
- Intellij idea 快捷键(3)--生成常用代码
- C++ 顺序容器原理
- iptables基本知识
- 字符串-10010 Where’s Waldorf
- JS HTML转义码解码