/*列举c语言常用字符串库函数(比如strlen, strcmp等,尽可能多),编写测试用例,验证结果。*/
#include <stdio.h>
#include <string.h> //使用字符串库函数
#pragma warning(disable:4996);
#define maxsize 100
//字符函数声明
void strlen();
void strcpy();
void strcat();
void strcmp();
void strchr();
void strcoll();
void strstr();
//主函数
int main()
{
//strlen();
//strcpy();
//strcat();
//strcmp();
//strchr();
strstr();
return 0;
}
/*
函数原型1:size_t strlen(char const *string);
返回值:返回字符串长度;
函数功能:获得字符串长度,不包括最后的“\0”
*/
/*
函数原型2:size_t strnlen(const char* s, size_t maxlen);;
返回值:返回实际字符串长度或maxlen;
函数功能:获得字符串长度,不包括最后的“\0”.如果实际个数n <= maxlen,则返回n,否则返回第二个参数。
*/
void strlen()
{
int as,bs;
char a[maxsize];
printf("请输入字符串:\n");
scanf("%s", a);
as=strnlen(a,10);
bs = strlen(a);
printf("字符串长度:%d\n",as);
printf("字符串长度:%d\n", bs);
}
/*
函数原型1:char *strcpy(char *dst, char const *src);
返回值:返回dst拷贝;
函数功能:把参数src字符串拷贝到dst参数中,如果两者内存出现重叠,则结果未定义。
注意点:strcpy函数前一定要确认dst长度不小于src长度。
*/
/*
函数原型2:char *strncpy(char *dst, char const *src, size_t len);
返回值:返回dst拷贝;
函数功能:拷贝src指定长度字符到dst目标数组,总是拷贝len个字符。
注意点:当src的的字符长度小于len时,会填充额外的nul;当src的字符长度大于len时,就会拷贝len个字符到dst中
*/
void strcpy()
{
char a[maxsize]="different";
char n[maxsize];
char* as,* bs;
printf("请输入字符串:\n");
scanf("%s", &n);
printf("拷贝前结果:%s\n", a);
as = strcpy(a, n);
bs = strncpy(a, n, 10);
printf("拷贝后结果:%s\n", as);
printf("拷贝后结果:%s\n", bs);
}
/*
函数原型1:char *strcat(char *dst, char const *src);
返回值:返回dst拷贝;
函数功能:把src字符串连接到dst字符串后面;
注意点:使用前一定要确认dst数组能同时容纳dst原始字符串和src字符串,否则会内存越界覆盖。
*/
/*
函数原型2:char *strncat(char *dst, char const *src, size_t len);
返回值:返回dst拷贝;
函数功能:把src字符串前n个字符连接到dst字符串后面;
*/
void strcat()
{
char a[maxsize], b[maxsize];
char* as, * bs;
printf("请输入a的字符串:\n");
scanf("%s", a);
printf("请输入b的字符串:\n");
scanf("%s", b);
as = strcat(a, b);
bs = strncat(a, b,5);
printf("b接a结果:%s\n", as);
printf("b接a前5个结果:%s\n", bs);
}
/*
函数原型1:int strcmp(char const *s1, char const *s2);
返回值:如果s1大于s2则返回一个大于0的值;如果s1小于s2则返回一个小于0的值;如果字符串相等则返回0。
函数功能:基于词典比较s1和s2大小。
注意点:s1和s2必须是字符串,即以nul结尾;大于或小于时的返回值没指定为1和-1,所以判断结果是要注意。
*/
/*
函数原型2:int strncmp(char const *s1, char const *s2, size_t len);
返回值:如果s1大于s2则返回一个大于0的值;如果s1小于s2则返回一个小于0的值;如果字符串相等则返回0。
函数功能:基于词典比较s1和s2最多前len个字符大小。
注意点:同strcmp;如果两个字符串在第len个字节之前存在不相等字符就会和strcmp一样停止比较返回结果,若果到第n个字符都相等,则返回0
*/
void strcmp()
{
int as, bs;
char a[maxsize], b[maxsize];
printf("请输入a的字符串:\n");
scanf("%s", a);
printf("请输入b的字符串:\n");
scanf("%s", b);
as = strcmp(a, b);
bs = strncmp(a, b, 5);
printf("比较结果:%d\n", as);
printf("比较前5个结果:%d\n", bs);
}
/*
函数原型1:char *strchr(char const *str, int ch);
返回值:如果在str字符串中(从左到右)查找到字符ch,则返回ch第一次出现所在位置指针;若没有则返回null。
函数功能:在str中正向查找字符ch第一次出现的位置。
*/
/*
函数原型2:char *strrchr(char const *str, int ch);
返回值:如果在str字符串中(从右到左)查找到字符ch,则返回ch第一次出现所在位置指针;若没有则返回null。
函数功能:在str中反向查找字符ch第一次出现的位置。
注意点:需要对函数返回值作非空判断。
*/
void strchr()
{
char a[50];
int b;
char* as,*bs;
printf("请输入a的字符串:\n");
scanf("%s", &a);
printf("请输入b的字符串:\n");
scanf("%s", &b);
as = strchr(a,b);
bs = strrchr(a, b);
printf("查找结果:%s\n", as);
printf("查找结果:%s\n", bs);
}
/*
函数原型1:int strcoll(const char *str1, const char *str2);
返回值:该函数返回值如下:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
函数功能:比较str1字符串和str2字符串的长度(大小)
*/
void strcoll()
{
char str1[maxsize];
char str2[maxsize];
int ret;
printf("请输入str1的字符串:\n");
scanf("%s", &str1);
printf("请输入str2的字符串:\n");
scanf("%s", &str2);
ret = strcoll(str1, str2);
if (ret > 0)
{
printf("str1 大于 str2");
}
else if (ret < 0)
{
printf("str2 小于 str1");
}
else
{
printf("str1 等于 str2");
}
}
/*
函数原型1char *strstr(const char *haystack, const char *needle);
返回值:该函数返回在a中第一次出现b字符串的位置,如果未找到则返回 null。
函数功能:在字符串a中查找第一次出现字符串b的位置,不包含终止符 '\0'。
*/
void strstr()
{
char a[maxsize];
char b[maxsize];
char* ret;
printf("请输入a的字符串:\n");
scanf("%s", &a);
printf("请输入b的字符串:\n");
scanf("%s", &b);
ret = strstr(a, b);
printf("子字符串是: %s\n", ret);
}
C语言字符串库常用函数(源码)
最新推荐文章于 2025-03-11 16:06:30 发布