本文小编为大家详细介绍“C++中string库函数的作用是什么和怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中string库函数的作用是什么和怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
strlen函数是string头文件中最常见的一个函数,用于求字符串的长度。 strlen英文全称string length,既字符串长度,可以顾名思义地来记忆。
✅这是从c++ reference上截取的介绍,strlen函数的用法就是向其传入一个字符串数组的首元素地址,其返回值是字符的个数。
⭕演示代码如下:
#include<string.h> int main() { char str[] = "abc"; int len1 = strlen(str); int len2 = strlen("abc"); printf("%d\n%d", len1,len2); return 0; }
!!这里应该注意的是,"abc"表示的也是一个字符串数组,其传给strlen函数的是首元素地址。
运行结果:
下面我们试着运行一下这个代码:
#include<string.h> int main() { char str1[] = "abc"; int len1 = strlen(str1); char str2[] = { 'a','b','c'}; int len2 = strlen(str2); printf("%d\n%d", len1,len2); return 0; }
运行结果:
❓为什么这里的str2的长度会是13呢?乍一看不是abc三个元素,长度为3吗?
这里需要补充一个知识点。在C语言中,系统会在字符串数组最后加上一个’\0’作为结束标志。而strlen函数的工作原理就是计算传入数组 (首元素地址指针指向的数组)在’\0’之前的元素个数,既该字符串长度。
而该代码块中所定义的str数组并不是一个字符串数组,因此’\0’的位置并不在最后一个元素后面,而是一个随机的位置,strlen函数会一直计算长度直到遇见’\0’才停止工作并返回结果。
因此,strlen(str2)会返回一个随机值,该值不代表该数组的长度。通过调试验证了str1字符串数组末端有一个’\0’而str2没有。
strcpy,英文全称copies strcpy,也是一个string头文件中较为常见的函数,用于将一个字符串的内容复制到另一个数组中。
(再次引用c++ reference中的描述,发现这种英文的工具网站的描述比中文的清晰地多)
✅strcpy的使用方法是向其传入两个指针,前者是目标数组首元素地址指针,后者是原字符串数组地址指针,将原字符串数组(包括末尾结束标志’\0’)拷贝到目标数组中。若目标数组中本身具有元素,则根据原字符串数组的长度一一覆盖。(❗注意:为了防止数组溢出,目标数组长度应大于原字符串数组。)
⭕演示代码如下:
#include<string.h> int main() { char str1[] = "abcdefg"; char str2[] = "123"; strcpy(str1, str2);//str2==>str1 printf("%s", str1);//打印拷贝处理后的str1 return 0; }
运行结果:
可见,str2的内容完美地拷贝到str1中了。
通过调试可以发现,str2的内容覆盖了str1前四个元素,而后面的元素依然存在。但是因为str2的’\0’也跟着拷贝过去了,所以在打印的时候,由于printf格式控制符是%s(既字符串类型),在遇到第一个’\0’时则认为它是字符串结束标志,结束打印。因此,打印出来的结果是字符串"123"。
strcmp函数,英文全称compares string(字符串比较), 既用于比较两个字符串,那么这里是比较字符串的什么呢?这里的比较是这样的:先比较两个字符串的第一个字符的ASCII码值(这里视为第一对字符),(下面的比较均是ASCII码值的比较)如果第一个字符串的第一个字符大于第二个字符串的第一个字符,则返回1;反之,则返回-1;若两个字符相等,则进行下一对字符的比较,直到出现有一对字符不同则返回相应的值(1或-1)。若两个字符串所有的字符都相同,则返回数字0。
传入两个指针,代表两个字符串数组的首元素地址。
⭕演示代码如下:
#include<string.h> int main() { char str1[20]; char str2[20]; scanf("%s%s", str1, str2); int ret=strcmp(str1, str2); switch (ret) { case 0:printf("str1=str2");break; case 1:printf("str1>str2");break; case -1:printf("str1<str2");break; } return 0; }
运行结果:
可见,这里的比较和我们所描述的相一致。
⭕这里应该注意,'\0’的ASCII码是0,它与其他字符都小。
(先介绍strcat)
strcat,英文全称concatenates string(连接字符串),这里很容易理解,strcat函数就是用于连接两个字符串的,那么它是如何连接的呢?接下来我将介绍一下它的具体用法。
✅如图所示,使用strcat函数需向其传入两个指针,前者是目标数组首元素地址指针,后者是原字符串数组地址指针(与strcpy类似,只不过这里是将原字符串接到目标字符串后面)。传参成功后,strcat会将原字符串的第一个字符覆盖到目标字符串的’\0’位置,后面再接着原字符串剩下的全部字符,直到遇见’\0’后结束,保证了拼接后的字符串只有一个结束标志’\0’。
⭕演示代码如下:
#include<string.h> int main() { char str1[5]="ab"; strcat(str1, "cd"); printf("%s\n", str1); char str2[5] = "ab"; char str3[3] = "cd"; strcat(str2, str3); printf("%s\n", str2); return 0; }//原字符串可以用字符串数组也可以直接用字符串,结果相同
运行结果:
如果我们想让拼接后的字符串更长,能不能修改一下原字符串实现呢?让我们来试试看????
int main() { char str1[5]="ab"; strcat(str1, "cde"); printf("%s\n", str1); }
运行结果:
运行出错,引发了异常,这是为什么呢?
这里是因为发生了数组溢出,由于"cde"字符串加上’\0’有四个字符,而str1我们规定了长度为5,当"cde"拼接在str1后覆盖了它的’\0’之后,拼接字符串一共有六个字符,超过了目标字符串str1的长度,无法容纳拼接后的字符串,所以发生了错误。
⭕由此我们可得,在使用strcat函数时,要规定给目标字符串一个合适的长度,防止数组溢出。
strstr,英文全称Locate substring,既定位子字符串。strstr的返回值比较特殊,它是通过传入一个母字符串和一个子字符串,然后在母字符串中定位子字符串的位置,返回值为指向母字符串中第一次出现的子字符串中指定的整个字符串的指针。若子字符串不属于母字符串的一部分,则返回空指针NULL。
⭕演示代码如下:
#include<string.h> int main() { char str1[20]="I love you"; char* p1 = strstr(str1, "you"); char* p2 = strstr(str1, "me"); printf("%s\n%s\n", p1,p2); }
运行结果:
memset函数,英文全称Fill block of memory,既填充内存块。memset的作用是将指针指向的内存块(这里可以认为是字符串)的第一个字节数设置为指定的值。
⭕演示代码如下:
#include<string.h> int main() { char str[20]="I love you"; memset(str, '-', 2); printf("%s\n", str); return 0; }
运行结果:
显而易见,其结果无非就是将两个’-'填充到str字符串的前两个位置。
读到这里,这篇“C++中string库函数的作用是什么和怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。