涉及内容:*1、标准库头文件(<string>、<cstring>)*2、输入方式(cin.getline、getline、ignore)3、长度(strlen)4、拷贝(strcpy)5、追加(strcat)6、比较(strcmp)7、寻找(strstr)8、分割(strtok)
*一、标准库头文件的区别(<string>、<cstring>)
*引用字符串的头文件是一切的关键。使用字符串时,第一件事是确认是否引用了字符串的头文件。在C++中常常能看到<string>和<cstring>两种标准库头文件。
1)<string>是C++标准库头文件,用于定义了 std::string
类和与字符串相关的函数和操作符重载。(<string>里的常见成员函数我们在下一篇文章里进行阐述)
2)<cstring>是C++版本的C 标准库头文件,其中定义了一系列 C 语言风格的字符串操作函数,如 strlen、strcpy、strcat 等。这些函数通常用于处理以空字符 '\0' 结尾的字符数组,即 C 风格的字符串。
*3)顺带一提,<string.h>是C标准库头文件,与<cstring>具有相同的库函数。实际上,<cstring>就是<string.h>在C++中的实现。
*注意:
*本篇文章不涉及<string>里的成员函数,主要介绍的是<cstring>里的常见库函数及操作。
1) <cstring> 用于 C 风格的字符数组操作,而下一篇将要分享的<string> 则主要用于 C++ 中的字符串对象操作。
2)在 C++ 中,推荐使用 <string> 头文件和 std::string
类来处理字符串,因为它提供了更多的功能和类型安全性。
*二、输入方式(cin.getline、getline、cin.ignore)
(特别注意:cin.getline()、getline()与cin.ignore()都位于<iostream>标准库头文件中。)
C++中,字符串常见的输入方式有三种:cin、cin.getline()、getline();
三种字符串输入方式对比
1)cin>>str;
特性:以空白字符作为分隔符,使得字符串中不能有空格。也就是说一个字符串里,我们只能输入“hello”,而不能输入一个“hello world”(在hello后输入的空格使输入提前结束)。
2)cin.getline ( str , size )
特性:用于从输入流中获取一整行字符串,只有遇到换行符时才停止输入,可以输入空格。使用cin.getline (str,size)时,需要提供输入的最大字符数(size),在输入达到指定的最大字符数后,输入也会停止。
3)getline(cin,str)
特性:与cin.getline() 作用相同,从输入流中获取一整行字符串,只有遇到换行符时才停止输入,可以输入空格。
* 清除换行符:cin.ignore()
当从输入流中读取字符后,换行符通常会留在输入缓冲区中。如果不清除输入缓冲区中的换行符,它可能会影响后续的输入操作。使用cin.getline()与getline()时,都需要注意使用ignore()及时清除换行符,以免提前结束,无法正常输入字符串。
图一:未使用 cin.ignore()及时清除换行符,导致getline()直接跳过
图二: 正确使用了cin.ignore()及时清除换行符,正常输入
三、长度(strlen)
len即length的缩写。对于字符数组可以使用strlen()测量其中的字符个数,即这里所说的长度。
语法为:strlen ( str );//这里的str是一个字符数组
示例如下:
四、拷贝(strcpy)
cpy即copy的缩写。可以使用strcpy()将一个已赋值的来源字符数组(source)拷贝到另一个目标字符数组(destination)上,此时目标数组原有的内容会被覆盖消失。
语法为:strcpy(dest,src);//即destination与source
示例如下:
五、追加(strcat)
cat即catch的缩写。可以使用strcat()将一个来源字符数组(source)追加到另一个目标字符数组(destination)的后面。不需要考虑目标字符数组是否会溢出的问题。
语法为:strcat(dest,src);
示例如下:
六、比较(strcmp)
cmp即compare的缩写。可以使用strcmp()比较两个字符数组的字典序。结果输出为一个整数——0(相等)或-1(小于)或1(大于)。
语法为:strcmp(str1,str2);//这里的先后顺序决定大于小于的实际意义
示例如下:
*字典序
类似于单词在字典中的排列顺序:即先比较两个单词的首字母,哪个更靠前哪个先。若首字母相等,继续比较下一个字母的先后顺序,以此类推。
七、寻找(strstr)
可以使用strstr()在一个字符串中查找第一次出现指定子字符串的位置。结果输出为一个指针,若没找到,则输出NULL。
语法为:strstr(dest, flag);//在destination字符串中找到flag字符串
示例如下:
八、分割(strtok)
tok即token(标记)的缩写。可以使用strtok()将字符串分割成若干个子字符串。strtok()函数会将原始字符串中出现的第一个分隔符位置替换为字符串结束符“\0”。
语法为:strtok(str,delimiter)//delimiter为自定义的分割符
示例如下: