本文将主要介绍字符串处理库函数中的strlen、strcpy、strcat、strcmp、atoi等,主要由<string.h>头文件提供。
strlen | |
---|---|
头文件 | #include<string.h> |
原型 | size_t strlen(const char *s) |
说明 | 求出s指向的字符串的长度(不包括null字符)。 |
返回值 | 返回s指向的字符串的长度。 |
size_t strlen(const char *s)
{
size_t len = 0;
while(*s++)
len++;
return len;
}
strcpy | |
---|---|
头文件 | #include<string.h> |
原型 | char *strcpy(char *s1,const char *s2); |
说明 | 将s2指向的字符串复制到s1指向的数组中。若s1和s2指向的内存空间重叠,则作未定义处理。 |
返回值 | 返回s1的值。 |
strncpy | |
---|---|
头文件 | #include<string.h> |
原型 | char *strncpy(char *s1,const char *s2,size_t n); |
说明 | 将s2指向的字符串复制到s1指向的数组中。若s2的长度大于等于n,则复制到第n个字符为止。否则用null字符填充剩余部分。若s1和s2指向的内存空间重叠,则作未定义处理。 |
返回值 | 返回s1的值。 |
char *strcpy(char *s1,const char *s2)
{
char *tmp = s1;
while(*s1++ = *s2++)
;
return tmp;
}
char *strncpy(char *s1,const char *s2,size_t n)
{
char *tmp = s1;
while(n){
if(!(*s1++ = *s2++)) break; //遇到'\0'就结束循环
n--;
}
while(n--)
*s1++ = '\0'; //用'\0'填充剩余部分
return tmp;
}
strcat | |
---|---|
头文件 | #include<string.h> |
原型 | char *strcat(char *s1,const char *s2) |
说明 | 将s2指向的字符串连接到s1指向的末尾。若s1和s2指向的内存空间重叠,则作未定义处理 |
返回值 | 返回s1的值。 |
strncat | |
---|---|
头文件 | #include<string.h> |
原型 | char *strncat(char *s1,const char *s2,size_t n); |
说明 | 将s2指向的字符串连接到s1指向的数组末尾。若s2的长度大于n则截断超出部分。若s1和s2指向的内存空间重叠,则作未定义处理。 |
返回值 | 返回s1的值。 |
char *strcat(char *s1,const char *s2)
{
char *tmp = s1;
while(*s1)
s1++; //前进到s1的末尾处
while(*s1++ = *s2++)
; //循环复制直至遇到s2中的'\0'
return tmp;
}
char *strncat(char *s1,const char *s2,size_t n)
{
char *tmp = s1;
while(*s1)
s1++; //前进到s1的末尾处
while(n--)
if(!(*s1++ = *s2++)) break; //遇到'\0'就结束循环
*s1 = '\0'; //在s1的末尾插入'\0'
return tmp;
}
strcmp | |
---|---|
头文件 | #include<string.h> |
原型 | char *strcmp(char *s1,const char *s2) |
说明 | 比较s1指向的字符串和s2指向的字符串的大小关系。 |
返回值 | 若s1和s2相等,则返回0;若s1大于s2,则返回正整数值,反之返回负整数值。 |
strncmp | |
---|---|
头文件 | #include<string.h> |
原型 | char *strncat(char *s1,const char *s2,size_t n); |
说明 | 比较s1指向的字符的数组和s2指向的字符的数组的前n个字符的大小关系。 |
返回值 | 若s1和s2相等,则返回0;若s1大于s2,则返回正整数值,反之返回负整数值。 |
int *strcmp(char *s1,const char *s2)
{
while(*s1 == *s2){
if(*s1 == '\0')
return 0;
s1++;
s2++;
}
return (unsigned char)*s1 - (unsigned char)*s2;
}
int *strncmp(char *s1,const char *s2,size_t n)
{
while(n && *s1 && *s2){
if(*s1 != *s2)
return (unsigned char)*s1 - (unsigned char)*s2;
s1++;
s2++;
n--;
}
if(!n) return 0; //相等
if(*s1) return 1; //s1 > s2
return -1; //s1 < s2
}
atoi | |
---|---|
头文件 | #include<stdlib.h> |
原型 | int atoi(const char *nptr) |
说明 | 将nptr指向的字符串转换为int型表示 |
返回值 | 返回转换后的值。结果值不能用int型表示时的处理未定义。 |
atol | |
---|---|
头文件 | #include<stdlib.h> |
原型 | long atol(const char *nptr) |
说明 | 将nptr指向的字符串转换为long型表示 |
返回值 | 返回转换后的值。结果值不能用long型表示时的处理未定义。 |
atof | |
---|---|
头文件 | #include<stdlib.h> |
原型 | double atof(const char *nptr) |
说明 | 将nptr指向的字符串转换为double型表示 |
返回值 | 返回转换后的值。结果值不能用double型表示时的处理未定义。 |
//使用atoi函数的例子
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char str[128];
printf("请输入字符串:");
scanf("%s",str);
printf("转换为整数后为%d。\n",atoi(str));
return 0;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有