文章目录
前言
一、strlen
1.基本用法
size_t strlen ( const char * str );
在调用strlen时,传递给函数素地址,返回一个无符号整形。
字符串已 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
所以所传递字符串中必须含有‘\0’
列如:
字符串“abcdef”字符个数应该为6,但因为第二种输入字符串中无“\0”,strlen函数就无法得到在哪里停止计数的信号,故返回一个随机的值。
2.strlen函数的实现
1.循环实现
直接上代码
#include<stdio.h>
int My_strlen(char arr[])
{
int i = 0;
int count = 0;
while (arr[i] != '\0')
{
count++;//计数
i++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int sum = My_strlen(arr);
printf("%d", sum);
}
2.递归实现
直接上代码
#include<stdio.h>
int My_strlen(char *p)
{
if (*p == '\0')
{
return 0;
}
else
{
return 1+My_strlen(p + 1);
}
}
int main()
{
char arr[] = "abcdef";
int sum = My_strlen(arr);
printf("%d", sum);
}
二.strcpy
1.基本用法
char* strcpy(char * destination, const char * source );
该函数将source指向的字符串 拷贝到目标destination所指向目标中。
源字符串必须以 ‘\0’ 结束。
会将源字符串中的 ‘\0’ 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
列如:
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "abcdef";
char arr[] = "xxxxxxxxx";
strcpy(arr, str);
printf("%s", strcpy(arr,str));
}
2.模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* My_strcpy(char* dest, const char* src)
{
char* ret = dest;
assert(src != NULL);//防止传递空指针;
while ((*dest++ = *src++) != '\0')
{
;
}
return ret;
}
int main()
{
char str[] = "hahaha";
char arr[100];
My_strcpy(arr, str);
printf("%s", My_strcpy(arr, str));
return 0;
}
三.strcat
基本用法
int strcat ( const char * str1, const char * str2 );
1.str1,str2字符串必须以 ‘\0’ 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。
4.每个函数都返回目标字符串(strDestination)。没有保留返回值来表示错误。
2.模拟实现
参考代码:
char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
四 .strstr
1.基本用法
char * strstr ( const char *str1, const char * str2);
功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。
2.模拟实现
char* My_strstr(char* str1,const char* str2)
{
char* p1 = str1;
char* p2 = str2;
char* m = NULL;
while (*p1)
{
while (*p1 != *p2)
{
p1++;
}
m = p1;
while (*p1 && *p2)
{
if (*p1 != *p2)
{
break;
}
p1++;
p2++;
}
if (!*p2)
{
return m;
}
p2 = str2;
p1 = m + 1;
}
return NULL;
}
五.strcmp
int strcmp ( const char * str1, const char * str2, size_t num );
模拟实现
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
int strcmp(const char* str1, const char* str2)
{
char* p1 = str1;
char* p2 = str2;
while (*p1 && *p2)
{
if (*p1 > *p2)
{
return 1;
}
if (*p1 < *p2)
{
return -1;
}
p1++;
p2++;
}
return *p1 - *p2;
}
五.其他常见字符操作函数
函数 如果他的参数符合下列条件就返回真
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit 十进制数字 0~9
isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母a~z或A~Z
isalnum 字母或者数字,a~z,A~Z,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符
1.基本用法
总结
以上就是常见字符串函数的具体用与模拟实现 掌握这些函数的实现方法 可以使我对其理解更上一层楼 这点十分重要!