【常用字符串相关函数】
主题:常用字符串相关函数(对应的头文件是 “string.h”)
//strcpy 字符串拷贝函数
//strcat 字符串连接函数
//strcmp 字符串比较函数
//strstr 字符串中找字符串
//有长度限制的字符串函数
//strncpy 限制长度的字符串拷贝函数(拷贝指定个数的字符)
//strncat 限制长度的字符串连接函数(连接指定个数的字符)
//strncmp 限制长度的字符串比较函数(比较指定个数的字符串)
字符串相关函数的简单使用:
//strcpy 拷贝函数
#include<stdio.h>
#include<string.h>
int main()
{
//定义str1数组
char str1[] = "abcdef";
//定义str2数组
char str2[100] = "fedcba";
//打印str1数组和待会拷贝后的str2数组做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组和待会拷贝后的str2数组做对比
printf("未进行新内容拷贝之前的数组str2:\n");
printf("%s\n",str2);
//进行拷贝strcpy(需要拷贝的目标地址,被拷贝的字符串的地址)
//将str1 里面的内容拷贝到 str2 里面去
//进行拷贝时拷贝的新内容会替换之前的内容
strcpy(str2,str1);
//打印str2检验是否拷贝成功
printf("进行新内容拷贝之后的数组str2:\n");
printf("%s\n",str2);
return 0;
}
//strcpy的模拟实现
#include<stdio.h>
#include<string.h>
//函数定义和声明
char* my_strcpy(char *p1,char *p2)
{
//记录需要拷贝的空间的起始地址
char* ret = p1;
//遍历被拷贝的数组,如果不是'\0' 就进入循环进行拷贝
while(*p2!='\0')
{
*p1 = *p2;
p1++;
p2++;
}
//循环结束,进行 \0 的拷贝
*p1 = *p2;
//返回已经拷贝好的数组空间的起始地址
return ret;
}
int main()
{
//定义str1数组
char str1[] = "abcdef";
//定义str2数组
char str2[100] = "fedcba";
//打印str1数组和待会拷贝后的str2数组做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组和待会拷贝后的str2数组做对比
printf("未进行新内容拷贝之前的数组str2:\n");
printf("%s\n",str2);
//进行拷贝strcpy(需要拷贝的目标地址,被拷贝的字符串的地址)
//将str1 里面的内容拷贝到 str2 里面去
//进行拷贝时拷贝的新内容会替换之前的内容
my_strcpy(str2,str1);
//打印str2检验是否拷贝成功
printf("进行新内容拷贝之后的数组str2:\n");
printf("%s\n",str2);
return 0;
}
//strcat 字符串连接函数
#include<stdio.h>
#include<string.h>
int main()
{
//定义str1数组
char str1[] = "abcdef";
//定义str2数组
char str2[100] = "ghljkl";
//打印str1数组和待会连接后的数组做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组和待会连接后的数组做对比
printf("数组str2:\n");
printf("%s\n",str2);
//进行连接 strcat(需要连接的目标地址,被连接的字符串的地址)
//在str1后面连接上str2
//从str1后面的 \0 处开始进行连接
strcat(str1,str2);
//打印str1检验是否连接成功
printf("进行新内容连接之后的数组str1:\n");
printf("%s\n",str1);
return 0;
}
//字符串连接函数的模拟实现
#include<stdio.h>
#include<string.h>
//函数的定义与声明
char* my_strcat(char* p1,char* p2)
{
//记录 p1 的起始位置
char* ret = p1;
//找到str1的末尾也就是'\0'的位置
while(*p1!='\0')
{
p1++;
}
//跳出第一个while循环时 p1 指向了str1中 \0 的位置,而p2指向的仍然是str2的其实位置
//遍历str2进行赋值连接操作
while(*p2!='\0')
{
*p1 = *p2;
p1++;
p2++;
}
//将wtr2中的 \0 赋值到str1 的末尾
*p1 = *p2;
//返回str1的起始位置
return ret;
}
int main()
{
//定义str1数组
char str1[100] = "abcdef";
//定义str2数组
char str2[100] = "ghljkl";
//打印str1数组和待会连接后的数组做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组和待会连接后的数组做对比
printf("数组str2:\n");
printf("%s\n",str2);
//进行连接 strcat(需要连接的目标地址,被连接的字符串的地址)
//在str1后面连接上str2
//从str1后面的 \0 处开始进行连接
my_strcat(str1,str2);
//打印str1检验是否连接成功
printf("进行新内容连接之后的数组str1:\n");
printf("%s\n",str1);
return 0;
}
//strcmp 字符串比较函数
#include<stdio.h>
#include<string.h>
int main()
{
//定义str1数组
char str1[] = "abcdef";
//定义str2数组
char str2[100] = "abcdqy";
//打印str1数组方便待会做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组方便待会做对比
printf("数组str2:\n");
printf("%s\n",str2);
//进行连接 strcmp(比较对象1的起始地址,比较对象2的起始地址)
//前面的和后面的比
//大于 则返回一个大于0的数字
//等于 则返回 0
//小于 则返回一个小于0的数字
//str1和str2比较
int r=strcmp(str1,str2);
if(r>0)
{
printf("str1>str2\n");
}
else if(r==0)
{
printf("str1 = str2\n");
}
else
{
printf("str1<str2\n");
}
return 0;
}
//字符串比较函数的模拟实现
#include<stdio.h>
#include<string.h>
//函数的定义与声明
int my_strcmp(char* p1,char* p2)
{
//对两个字符数组同时遍历
//两个数组都同时不是 \0 时进入循环
while((*p1!='\0')&&(*p2!='\0') )
{
//p1大于p2时
if(*p1>*p2)
{
return 1;
}
//p1小于p2时
else if(*p1<*p2)
{
return -1;
}
//p1 = p2 时 p1 和 p2 同时++ 向后遍历继续比较
else
{
p1++;
p2++;
}
}
//跳出循环时说明p1和p2其中有一个指向了 \0
//当p1等于\0,p2不等于\0时说明str2大于str1
if((*p1=='\0')&&(*p2!='\0'))
{
return -1;
}
//当p1不等于\0,p2等于\0时说明str2小于str1
else if((*p1!='\0')&&(*p2=='\0'))
{
return 1;
}
//否则就是两个同时为 \0 说明str1 = str2
else
{
return 0;
}
return 0;
}
int main()
{
//定义str1数组
char str1[100] = "abcdef";
//定义str2数组
char str2[100] = "abcdef";
//打印str1数组方便待会做对比
printf("数组str1:\n");
printf("%s\n",str1);
//打印str2数组方便待会做对比
printf("数组str2:\n");
printf("%s\n",str2);
//进行连接 strcmp(比较对象1的起始地址,比较对象2的起始地址)
//前面的和后面的比
//大于 则返回一个大于0的数字
//等于 则返回 0
//小于 则返回一个小于0的数字
//str1和str2比较
int r=my_strcmp(str1,str2);
printf("比较结果:\n");
if(r>0)
{
printf("str1>str2\n");
}
else if(r==0)
{
printf("str1 = str2\n");
}
else
{
printf("str1<str2\n");
}
return 0;
}