my_strlen
size_t my_strlen(const char *s)
//定义一个指向字符,常量的指针,这里,s是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容
{
size_t len = 0;//size_t 无符号整形
if(NULL == s)//判断传递过来的指针是否为空,防止出现段错误,内存错误(野指针)
{
return 0;
}
while (*s != '\0')//判断字符串结束
{
len++;
s++;
}
return len;//返回字符串长度
}
my_strcpy
char * my_strcpy(char *dest, char *src)
{
if(dest == NULL || src == NULL)//判断传递过来的指针是否为空,防止出现段错误,内存错误(野指针)
{
return NULL;
}
char *temp = dest;//不要直接改变形参,避免传递回主函数时发生错误
while(*src != '\0')
{
*temp = *src;
src++;
temp++;
}
*temp = '\0';
return dest;
}
my_strcat
char * my_strncat(char *dest, char *src, size_t n)
{
if(dest == NULL || src == NULL)
{
return NULL;
}
char *temp = dest;
while(*temp != '\0')
{
temp++;
}
for(int i = 0; (i < n) && (*src != '\0'); i++)//指针不能越界
{
*temp = *src;
temp++;
src++;
}
*temp = '\0';
return dest;
}
my_strcmp (比较的是大小不是长度,字母在后面的大)
#include <stdio.h>
#include <stdlib.h>
int my_strcmp(char *s1, char *s2)//两次判断,一、数组中的元素有空的;二、遍历各元素进行比较
{
if (s1 == NULL && s2 != NULL) //假设数组有空的,进行判断
{
return -1; //小于
}
if (s1 != NULL && s2 == NULL)
{
return 1; //大于
}
if (s1 == NULL && s2 == NULL)
{
return 0; //等于
}
while ((*s1 != '\0') && (*s2 != '\0')) //遍历比较字符串的各个元素
{
if (*s1 > *s2)
{
return 1;
}
if (*s1 < *s2)
{
return -1;
}
s1++; //地址往后移,比较下一个元素
s2++;
}
if (*s1 == '\0' && *s2 == '\0') //退出程序后进行判断
{
return 0;
}
if (*s1 != '\0' && *s2 == '\0')
{
return 1;
}
if (*s1 == '\0' && *s2 != '\0')
{
return -1;
}
}
int main(int argc, char *argv)
{
char*str=(char*)malloc(sizeof(char)*100);
char*str1=(char*)malloc(sizeof(char)*100);
printf("please input chars str\n");
scanf("%s",str);
printf("please input chars str1\n");
scanf("%s",str1);
int a = my_strcmp(str, str1);
printf("%d\n", a);
return 0;
}
例: 输入一个字符串,计算字符串中子串出现的次字数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
int count_sub_str(char *sub, char *src)
{
int count = 0;
int s_len = strlen(sub);
while (*src != '\0')
{
if (strncmp(sub, src, s_len) == 0) //让src中的前strlen(sub)字符与sub比较
{
count++;
src = src + s_len; //是跳过strlen(sub)个字符长度
}
else
{
src++; //不然一个一个字符跳
}
}
return count;
}
int main(int argc, char *argv[])
{
char *sub;
char src[MAX_SIZE]; //定义常量
printf("Please input src:\n");
scanf("%s", src);
sub = (char *)malloc(sizeof(char) * MAX_SIZE);
if (NULL == sub)
{
printf("malloc sub is error!\n");
exit(1);
}
printf("Please input sub:\n");
scanf("%s", sub);
int count = count_sub_str(sub, src);
printf("sub str count = %d\n", count);
return 0;
}
|