strncat() --链接字符串
strncat()原文介绍https://cplusplus.com/reference/cstring/strncat/?kw=strncat
原型
char * strncat ( char * destination, const char * source, size_t num );
分析
char * //返回一个char类型的指针
char * destination //目标函数,即你要放字符串的数组的地址,包含了空格
//注意设置大一点的空间,防止溢出
const char * source //准备放置的字符串
size_t num //无符号整型的数,即你要放多少进去
例子
#include<stdio.h>
#include<string.h>
int main() {
char arr1[20] = "hello";
char arr2[10] = " world!";
strcat(arr1, arr2, strlen(arr2)); //srtlen() 计算字符串长度不包括终止符
printf("%s\n",arr1);
return 0;
}
strstr() --查找子字符串
strstr()原文介绍https://cplusplus.com/reference/cstring/strstr/?kw=strstr
原型
const char * strstr ( const char * str1, const char * str2 ); char * strstr ( char * str1, const char * str2 );
分析
const char * //返回一个char类似的指针,没找到返回 NULL
const char * str1 //原字符串、即被找字符串
const char * str2 //你要找的字符串
例子
//strstr
#include<stdio.h>
#include<string.h>
int main() {
char arr1[20] = "This is a cat";
char arr2[10] = "cat";
char arr3[20] = { 0 };
char* parr;
if (strstr(arr1,arr2) != NULL) //没找到会返回NULL
{
parr = strstr(arr1, arr2);
strcpy(arr3, parr);
printf("%s\n", arr3);
}
else
{
printf("ON!\n");
}
return 0;
}
两者联系在一起可以解决一个经典题目
经典题目
字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1
给定s1 = abcd和s2 = ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
追加法解题
在arr1字符串后面追加一个arr1字符串,在新的arr1字符串中查找是否有子字符串arr2
#include<stdio.h>
#include<string.h>
int Check(char s1[], char s2[])
{
if (strlen(s1) != strlen(s2))
{
return 0;
}
strncat(s1, s1, strlen(s1));
return strstr(s1, s2) != NULL;
}
int main() {
char s1[20] = "AABCD";
char s2[10] = "DAABC";
if (Check(s1, s2))
{
printf("YES!\n");
}
else
{
printf("ON!\n");
}
}
结束语
里面有好多缺陷啊,而且关于这两个库函数是有其他很相似的库函数比如strcat,相似但是又不相同,有很多库函数都会有这种情况,加一个字母就意思不一样,用法也不一样了,比如strcpy与strnpy,是不是很神奇,很牛逼,这都是前辈们的心血啊,我们加以利用就可以解决好多类型的问题。
哎呦喂,这就是库函数的厉害之处吗?学到了……
未完持续更新中……