C语言中的"string.h"
strlen求字符串长度
strcmp比较2个字符串是否一样
strcat字符串连接操作
strcpy字符串拷贝操作
strncat字符串连接操作(前n个字符)
strncpy字符串拷贝操作(前n个字符)
strchr查询字串
strstr 查询子串
1. strlen求字符串长度
功能:strlen函数求的是字符串的长度
它求得方法是从字符串的首地址开始到遇到第一个'\0'停止计数
如果你只定义没有给它赋初值,这个结果是不定的,它会从字符串首地址一直记下去,直到遇到'\0'才会停止。
原型:size_tstrlen(const char *s);
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0;
char *tmp1 = "Hello,world";
// https://jeremybai.github.io/blog/2014/09/10/size-t
//在这里出现警告,有size_t(aka unsigned long)
//这是size type等价于最大的整形,用于提高代码移植性
//本句中返回11,不包括字符串末尾的'\0'字符,只返回有效位的长度
printf("%d\n", strlen(tmp1));
char *tmp2 = NULL;
//下面这一句会出错,因为不能返回NULL的长度
//printf("%d\n", strlen(tmp2));
char *tmp3;
//下面这一句中返回的是随机长度
printf("%d\n", strlen(tmp3));
return 0;
}
2. strcmp比较2个字符串是否一样
功 能:串比较
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
用 法:int strcmp(char *str1, char *str2);
#include <string.h>
#include <stdio.h>
int main()
{
char *buf1 = "aaaaaaaaa", *buf2 = "aad", *buf3 = "ccc";
printf("%d\n", strcmp(buf2, buf1));
printf("%d\n", strcmp(buf2, buf2));
printf("%d\n", strcmp(buf2, buf3));
return 0;
}
/*
3
0
-2
*/
//由结果可知strcmp是类似于字典形式的比较
//其返回值是
//第一次出现差别的两个字符的ASCII码之差
3. strcat字符串连接操作
功 能:字符串拼接函数
strcat---string catenate
用 法:char *strcat(char *destin, char *source);
注意,strcat的第一项中,必须是一个有分配好空间的数组名
#include <string.h>
#include <stdio.h>
int main()
{
char destination[25];
char *blank = " ", *c = "C++", *Borland = "Borland";
printf("%d\n", strlen(destination));
strcpy(destination, Borland);
printf("%d\n", strlen(destination));
strcat(destination, blank);
printf("%d\n", strlen(destination));
strcat(destination, c);
printf("%d\n", strlen(destination));
printf("%s\n", destination);
return 0;
}
/*
5 这里是一个随机值
7 "Borland"的长度
8 "Borland "的长度
11 "Borland C++"的长度
Borland C++ 打印出了该字符
*/
4. strcpy字符串拷贝操作
功 能:拷贝一个字符串到另一个
注意:这种拷贝是完全的覆盖,就算之前的字符串大于现有的,也会提前写入结束标志符'\0'
用 法:char *strcpy(char *destin, char *source);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char string[10];
char *str1 = "Hello!";
char *str2 = (char *)malloc(sizeof(char) * 10);
strcpy(string, str1);
//若str2没有预先分配空间
//则下面这一句中出现错误提示"Bus error: 10"
//所以strcpy的前一位一定要是有分配空间的
strcpy(str2, str1);
printf("%s\n", string);
printf("%s\n", str2);
return 0;
}
/*
Hello!
Hello!
*/
5. strncat字符串连接操作(前n个字符)
功能:将src的前n个字符给复制到dest的末尾
用法:char * strncat(char *dest, const char *src, size_t n);
#include <stdio.h>
#include <string.h>
int main()
{
char dest[20] = "Hello ";
char src[20] = "World For U";
//strncat用于将src的前5位
//给复制到dest的末尾
strncat(dest, src, 5);
printf("%s\n", dest);
return 0;
}
/*
Hello World
*/
6. strncpy字符串拷贝操作(前n个字符)
功能:将前n个字符复制到目标指针数组中
用法:char *strncpy(char *destinin, char *source, int maxlen);
#include <stdio.h>
#include <string.h>
int main()
{
char name1[] = "Chinanet", name2[] = "This is the best day ever.";
char destin[30] = "I am so mad.";
strncpy(destin, name1, 3);
printf("%s\n", destin);
strncpy(destin, name2, 29);
printf("%s\n", destin);
}
//由如下结果可以看出,复制前n个字符的时候
//如果n个字符以内没有遇到结束符'\0',则不添加结束符
//如说在n个字符以内,遇见过结束符
//则在最末尾额外添加结束符
/*
Chim so mad today.
This is the best day ever.
*/
7. strchr和strrchr从串中查询字
功 能:在串中查找指定字符的第一个/最后一个出现的指针位置
chr表示character,而中间多出的r表示reverse
用 法:
char *strchr(char *str, char c);
char *strrchr(char *str, char c);
#include <string.h>
#include <stdio.h>
int main()
{
char string[20];
char *ptr1, *ptr2, c = 'i';
strcpy(string, "This is a string.");
ptr1 = strchr(string, c);
if (ptr1)
{
printf("Use strchr:\n");
printf("For \"%s\"\n", string);
printf("The character %c is at position: %d\n",
c, ptr1 - string);
}
else
printf("The character was not found!\n");
ptr2 = strrchr(string, c);
if (ptr2)
{
printf("Use strrchr:\n");
printf("For \"%s\"\n", string);
printf("The character %c is at position: %d\n",
c, ptr2 - string);
}
else
printf("The character was not found!\n");
return 0;
}
/*
Use strchr:
For "This is a string."
The character i is at position: 2
Use strrchr:
For "This is a string."
The character i is at position: 13
*/
8. strstr查询子串
功 能:第一次出现的子串位置
用 法:char *strstr(char *str1, char *str2);
#include <stdio.h>
#include <string.h>
int main()
{
char *str1 = "The hat on the cat is flat.", *str2 = "at";
char *ptr;
ptr = strstr(str1, str2);
if (ptr)
{
printf("Use strstr:\n");
printf("For \"The hat on the cat is flat.\"\n");
printf("The position of \"%s\" is %d\n", str2, ptr - str1);
}
else
printf("Not Found!\n");
return 0;
}
//标准库中不存在strrstr,也即不存在从右往左匹配子串
/*
Use strstr:
For "The hat on the cat is flat."
The position of "at" is 5
*/
借鉴:https://baike.baidu.com/item/string.h/4262091?fr=aladdin
Cpp中的"string"
借鉴:https://blog.csdn.net/samkieth/article/details/50876347
借鉴:王道机试指南P42