有关字符串的部分函数
求字符串长度
strlen
size_t strlen( const char *string );
1.字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )
2.参数指向的字符串必须要以 ‘\0’ 结束
3.注意函数的返回值为size_t,是无符号的( 易错 )
函数的使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = "sesfes";
int ret = strlen(arr);
printf("%d", ret);
return 0;
}
运行结果
模拟实现
1.用递归来实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int my_strlen(char* arr)
{
if (*arr != '\0')
{
return my_strlen(arr + 1) + 1;
}
else
{
return 0;
}
}
int main()
{
char arr[] = "sesfes";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
2.用计算器实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int my_strlen(char* arr)
{
int cont = 0;
while (*arr++)
{
cont++;
}
return cont;
}
int main()
{
char arr[] = "sesfes";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
3.用指针实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int my_strlen(char* arr)
{
char* p = arr;
while (*arr != '\0')
{
arr++;
}
return arr-p;
}
int main()
{
char arr[] = "sesfes";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
长度不受限制的字符串函数
strcpy
char *strcpy( char *strDestination, const char *strSource );
1.源字符串必须以 ‘\0’ 结束
2.会将源字符串中的 ‘\0’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变
错误演示
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = {'a','b','c'};
char nu[20] = { 0 };
strcpy(nu,arr);
printf("%s", nu);
return 0;
}
源字符串没有以’\0’结束,程序直接崩溃了
函数的使用
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = "asesf";
char nu[20] = { 0 };
strcpy(nu,arr);
printf("%s",nu);
return 0;
}
模拟实现
#include <stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, char* str)
{
char* ret = dest;
assert(dest && str);
while (*dest++ = *str++)
{
;
}
return ret;
}
int main()
{
char arr[] = "sfsdsefs";
char arr2[20] = { 0 };
my_strcpy(arr2, arr);
printf("%s", arr2);
return 0;
}
strcat
char *strcat( char *strDestination, const char *strSource );
1.源字符串必须以 ‘\0’ 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。
注:不能自己给自己追加
函数使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = "hello ";
char arr2[] = "world";
strcat(arr, arr2);
printf("%s", arr);
return 0;
}
模拟实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<assert.h>
char* my_strcat(char* dest, char* str)
{
int* ret = dest;
assert(dest && str);
while (*dest!='\0')
{
dest++;
}
while (*dest++ = *str++)
{
;
}
return ret;
}
int main()
{
char arr[] = "hello ";
char arr2[] = "world";
my_strcat(arr, arr2);
printf("%s", arr);
return 0;
strcmp
int strcmp( const char *string1, const char *string2 );
1.第一个字符串大于第二个字符串,则返回大于0的数字
2.第一个字符串等于第二个字符串,则返回0
3.第一个字符串小于第二个字符串,则返回小于0的数字
函数的使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<assert.h>
#include<string.h>
int main()
{
char arr[] = "hello ";
char arr2[] = "world";
int ret = strcmp(arr, arr2);
printf("%d", ret);
return 0;
}
模拟实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<assert.h>
#include<string.h>
int my_strcmp(const char* dest, const char* str)
{
assert(dest && str);
while (*dest == *str)
{
if (*dest == '\0')
{
return 0;
}
dest++;
str++;
}
if (*dest < *str)
{
return -1;
}
else
return 1;
}
int main()
{
char arr[] = "hello ";
char arr2[] = "world";
int ret = my_strcmp(arr, arr2);
printf("%d", ret);
return 0;
}
strstr
char *strstr( const char *string, const char *strCharSet );
函数的使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = "hello world";
char arr2[] = "world";
char* ret =strstr(arr, arr2);
if (ret == NULL)
{
printf("没找到\n");
}
else
{
printf("找到了");
}
return 0;
}
模拟实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<assert.h>
char* my_strstr(const char* dest, const char* str)
{
assert(dest && str);
char* ret = dest;
char* p1 = NULL;
char* p2 = NULL;
while (*ret != '\0')
{
p1 = ret;
p2 = str;
while (*p1 && *p2 && *p2 == * p1)
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return ret;
}
ret++;
}
return NULL;
}
int main()
{
char arr[] = "hello world";
char arr2[] = "world";
char* ret =my_strstr(arr, arr2);
if (ret == NULL)
{
printf("没找到\n");
}
else
{
printf("找到了");
}
return 0;
}