目录
一、指针模拟实现strlen()函数
1.strlen() 函数description
一、指针模拟实现strlen()函数
1.strlen() 函数description
strlen() 函数计算 src 指向的字符串的长度,
不包括终止空字节 ('\0')。
2.用指针实现且将strlen封装。
#include <stdio.h>
#include <string.h>
unsigned int mystrlen(const char *p);
int main(int argc, const char *argv[])
{
char arr[128] = {0};
//scanf("%s",arr);
//不能用scanf输入,scanf遇到空格会停止,不会把空格及之后的字符计算进去
gets(arr);
int lenth = mystrlen(arr);
printf("输入的字符串长度为%d\n",lenth);
int sum = strlen(arr);
printf("输入的字符串长度为%d\n",sum);
return 0;
}
unsigned int mystrlen(const char *p){
int i = 0;
while('\0'!= *(p+i)){ //注意在这是'\0',不是'0'
i++;
}
return i;
}
3.运行结果。
二、指针模拟实现strcpy()函数
1.strcpy() 函数description
strcpy() 函数将 src 指向的字符串,
包括终止空字节 ('\0') 复制到目标字符串,
字符串不能重叠,并且目标字符串 dest 必须足够大以接收副本。
小心缓冲超支!即数组越界。
2.用指针实现且将strcpy封装。
#include <stdio.h>
void mystrcpy(const char *p,char *q){
int i = 0;
while(*(p+i)){
*(q+i) = *(p+i);
i++;
}
printf("%p\n",p);
printf("%p\n",q);
}
int main(int argc, const char *argv[])
{
char arr[128] = {0};
gets(arr);
char dest[128] = {0};
printf("%p\n",arr);
printf("%p\n",dest);
mystrcpy(arr,dest);
printf("你输入的是arr = %s\n",arr);
printf("已经复制到dest = %s\n",dest);
return 0;
}
3.运行结果。
三、指针模拟实现strcat()函数
1.strcat() 函数description
strcat() 函数将 src 字符串附加到 dest 字符串,覆盖 dest 末尾的终止空字节('\0'),
然后添加一个终止空字节。
字符串不能重叠,dest 字符串必须有足够的空间用于结果。
如果dest不够大,程序行为是不可预测的;
缓冲区溢出是攻击安全程序的常用途径。
2.用指针实现且将strcat封装。
#include <stdio.h>
unsigned int mystrlen(const char *p);
void mystrcat(char *dest, const char *str){
int sum = mystrlen(dest);
int i = 0;
while(*(str+i)){
*(dest+sum+i) = *(str+i);
i++;
}
}
int main(int argc, const char *argv[])
{
char str[128] = {0};
gets(str);
char dest[128] = "hello";
printf("你输入的字符串是 %s\n",str);
printf("dest原来是 %s\n",dest);
mystrcat(dest,str);
printf("它俩拼接后是 %s\n",dest);
return 0;
}
unsigned int mystrlen(const char *p){
int i = 0;
while(*(p+i)){
i++;
}
return i;
}
3.运行结果。
四、指针模拟实现strcmp()函数
1.strcmp() 函数description
strcmp() 函数比较两个字符串 s1 和 s2。
如果 s1,它返回一个小于、等于或大于零的整数
分别被发现小于、匹配或大于 s2。
2.用指针实现且将strcmp封装。
#include <stdio.h>
#include <stdlib.h>
int mystrcmp(const char *p,const char *q){
for(;*p == *q;q++,p++){ //想复杂了,把各种情况都想到了
//其实只用一个对一个比较就行,不用考虑字符串的长短
if('\0' == *p)
return 0;
}
return *p - *q;
}
int main(int argc, const char *argv[])
{
char arr[128] = {0};
char arr1[128] = {0};
int cha = 0;
puts("请输入你想比较的第一个字符串");
scanf("%s",arr);
getchar();
puts("请输入你想比较的第二个字符串");
scanf("%s",arr1);
cha = mystrcmp(arr,arr1);
if (cha > 0){
printf("字符串1比字符串2大%d\n",cha);
}else if (0 == cha){
printf("字符串1和字符串2一样大\n");
}
if (cha < 0){
printf("字符串2比字符串1大%d\n",abs(cha));
}
return 0;
}