5.1字符串操作函数(以str开头的字符串处理函数默认遇到'\0'结束操作)
5.1.1 测量字符串的长度strlen()
strlen()
函数用于计算一个字符串的长度。
#include <string.h> //注意:该头文件必须包含
size_t strlen(const char *s);
// s指的是需要测量字符串的首地址
例:
char str[] = "Hello";
int length = strlen(str); // length 等于 5
遇到 '\0' 表示字符串的结尾,计算长度不包含该标志符号
例如:
5.1.2 字符串拷贝函数strcpy
1.strcpy或者strcpy_s将指定的字符串复制到目地地址
#include <string.h>
char *strcpy(char *dest,Tconst char *src);
char *strncpy(char *dest,const char *src,size_t n);
dest:目的空间地址
src: 原字符串的首元素地址
这个比较常用,经常会在一些项目中使用到。
案例:
注意:此时我使用的qt5.13.2对这个函数进行了警告:warning: 'strcpy' is deprecated: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
这个警告信息是由于strcpy()
函数被标记为不安全的,并且在一些编译环境中被认为是不建议使用的。如果你希望消除这个警告,可以考虑使用更安全的函数strcpy_s(C++11引入)
此时就没有警告信息了
2.strncpy
将指定长度的字符串复制到目标字符串
strncpy
函数用于将指定长度的字符串复制到目标字符串中。它的原型如下:
char *strncpy(char *destination, const char *source, size_t num);
destination
:目标字符串,即要将源字符串复制到的位置。source
:源字符串,即要被复制的字符串。num
:要复制的字符数的最大限制。
strncpy
函数会将 source
中的最多 num
个字符复制到 destination
中,并且添加一个 null 字符,以确保目标字符串以 null 结尾。如果 source
的长度小于 num
,那么 destination
中剩余的位置会被填充为 null 字符。
这个函数可用于避免 strcpy
和 strcpy_s
中的潜在缓冲区溢出问题,因为它允许你指定要复制的最大字符数。
以下是一个使用 strncpy
函数的示例:
#include <cstring>
int main() {
char source[] = "Hello, world!";
char destination[20];
strncpy(destination, source, 10); // 将 source 中的最多 10 个字符复制到 destination 中
destination[10] = '\0'; // 手动添加 null 字符,以确保字符串结束
return 0;
}
在这个示例中,source
中的最多 10 个字符被复制到 destination
中。为了确保 destination
以 null 结尾,我们手动添加了 null 字符。
5.1.3 字符串追加函数strcat
在C++中,字符串追加函数是strcat()
。该函数用于将一个字符串追加到另一个字符串的末尾。以下是strcat()
函数的基本用法:
#include <cstring> // 包含头文件以使用strcat函数
char str1[20] = "Hello, ";
char str2[] = "world!";
strcat(str1, str2);
在这个例子中,str1
是目标字符串,str2
是我们想要追加到str1
末尾的源字符串。strcat()
函数将str2
中的内容追加到str1
的末尾,结果会保存在str1
中。
需要注意的是,为了能够容纳目标字符串和源字符串的合并,目标字符串数组str1
必须足够大。
另外,C++标准库中的string
类也提供了更安全和方便的字符串操作方法,推荐在C++中使用string
类来处理字符串。使用string
类,字符串追加可以通过运算符+
来完成,例如:
#include <string>
std::string str1 = "Hello, ";
std::string str2 = "world!";
std::string result = str1 + str2;
使用string
类,我们可以直接使用+
运算符将两个字符串合并,并将结果保存在新的string
对象result
中。这种方式更为直观和安全。
5.1.4 字符串比较strcmp
C++中,可以使用strcmp()
函数来比较两个字符串。该函数用于按照字典顺序比较两个字符串,并返回一个整数值来表示比较的结果。
strcmp()
函数的原型如下:
int strcmp(const char *str1, const char *str2);
int strncmp(const char *str1, const char *str2, size_t n);//根据n长度比较
str1
:要比较的第一个字符串。str2
:要比较的第二个字符串。
函数返回值:
- 如果
str1
小于str2
,则返回一个负整数。 - 如果
str1
等于str2
,则返回0。 - 如果
str1
大于str2
,则返回一个正整数。
以下是strcmp()
函数的一个简单示例:
#include <string> // 包含头文件以使用strcmp函数
const char *str1 = "apple";
const char *str2 = "banana";
int result = strcmp(str1, str2);
if (result < 0) {
// str1 小于 str2
} else if (result > 0) {
// str1 大于 str2
} else {
// str1 等于 str2
}
在这个示例中,strcmp()
函数将比较str1
和str2
的字典顺序,并将结果保存在result
中。根据result
的值,我们可以判断str1
和str2
的大小关系。
需要注意的是,C++标准库中的string
类也提供了比较字符串的方法,如果在C++中使用string
类来表示字符串,可以通过<
, <=
, >
, >=
, ==
, !=
等运算符来比较字符串,从而使比较更直观和易读。