一、获取字符串长度函数
#include <string.h>
size_t strlen(const char *s);
- 功能:计算一个字符串的长度
- 参数:
s:指定的字符串 - 返回值:
当前字符串的长度 - 注意:strlen获取的字符串长度遇到第一个\0结束且\0不算做字符串长度之中
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
// 使用strlen 函数获取字符串长度
// strlenn获取的字符串的长度遇到第一个\0结束
char s1[100] = "hel\0lo";
printf("s1_len = %d\n", strlen(s1));
printf("s1_size = %d\n", sizeof(s1));
char *s2 = "hello";
printf("s2_len = %d\n", strlen(s2));
printf("s2_size = %d\n", sizeof(s2));
return 0;
}
执行结果
二、字符串拷贝函数
#include <string.h>
char *strcpy(char *dest, const char *src);
- 功能:将src复制给dest
- 参数:
- dest: 目的字符串
- src:源字符串
- 返回值:
- 保存dest字符串的首地址
- 注意:
- 使用strcpy函数复制字符串时必须保证dest足够大,否则会内存溢出
- strcpy是将src字符串中第一个\0之前包括\0复制给dest
char *strncpy(char *dest, const char *src, size_t n);
- 函数的说明:
- 将src指向的字符串前n个字节,拷贝到dest指向的内存中
- 返回值:
- 目的内存的首地址
- 注意:
strncpy
不拷贝‘\0’
;- 如果
n
大于src
指向的字符串中的字符个数,则在dest
后面填充n‐strlen(src)
个’\0’
。
执行结果:
三、字符串追加函数
#include <string.h>
char *strcat(char *dest, const char *src);
- 功能:将src追加到dest的后面
- 参数:
- dest: 目的字符串
- src:源字符串
- 返回值:
- 保存dest字符串的首地址
char *strncat(char *dest, const char *src, size_t n);
- 功能:追加
src
指向的字符串的前n
个字符,到dest指向的字符串的后面。 - 注意:如果
n
大于src
的字符个数,则只将src
字符串追加到dest
指向的字符串的后面追加的时候会追加’\0’
。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
// 使用strcat函数追加字符串
char s1[32] = "hello world";
char s2[32] = "abcdefg";
//strcat是从s1的\0的位置开始追加,直到s2的第一个\0复制完毕后结束
strcat(s1,s2);
printf("s1 = %s\n", s1);
return 0;
}
执行结果:
四、字符串比较函数
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
- 功能:
strcmp
是比较两个字符串的内容,strncmp
是比较两个字符串的前n个字节是否一样 - 参数:
- s1、s2:要比较的两个字符串
- n:
strncmp
中的参数n表示要比较的字节数
- 返回值:
0: s1 = s2
>0: s1 > s2
<0: s1 < s2
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
//使用strcmp比较两个字符串的内容是否一致
//strcmp函数一个字符一个字符比较,只要出现不一样的,就会立即返回
char s1[] = "hello";
char s2[] = "a";
int ret = strcmp(s1,s2);
if(ret == 0)
{
printf("s1 = s2\n");
}
else if(ret > 0)
{
printf("s1 > s2\n");
}
else
{
printf("s1 < s2\n");
}
return 0;
}
执行结果:
五、字符查找函数
#include <string.h>
char *strchr(const char *s, int c);
- 功能:在字符指针s指向的字符串中,找ascii 码为c的字符
- 参数:
- s:指定的字符串
- c:要查找的字符
- 返回值:
- 成功:找到的字符的地址
- 失败:NULL
- 注意:s指向的字符串中有多个ASCII为c的字符,则找的是第1个字符
char *strrchr(const char *s, int c);
- 功能:在s指向的字符串中,找最后一次出现的ASCII为c的字符。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
//使用strchr函数在一个字符串中查找字符
char s[] = "hel6lo wor6ld";
//找第一个匹配的字符
char *ret = strchr(s, '6');
//找最后一个匹配的字符
//char *ret = strrchr(s, '6');
if(ret == NULL)
{
printf("not found\n");
}
else
{
printf("found, at the %dth position of string s\n", ret-s);
}
return 0;
}
执行结果:
六、字符串匹配函数
#include <string.h>
char *strtsr(const char *haystack, const char *needle);
- 函数说明:在haystack指向的字符串中查找needle指向的字符串,也是首次匹配
- 返回值:
- 找到了:找到的字符串的首地址
- 没找到:返回NULL
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
//使用strstr函数在一个字符串中查找另一个字符串
char s[] = "1234:4567:666:789:666:7777";
//strstr查找的时候,查找的是第二个参数的第一个\0之前的内容
char *ret = strstr(s, "666");
if(ret == NULL)
{
printf("not found\n");
}
else
{
printf("found, at the %dth position of string s\n", ret - s);
}
return 0;
}
执行结果:
七、字符串转换数值
#include <stdlib.h>
int atoi(const char *nptr);
- 功能:将一个数字型字符串转化为整形数据
- 参数:
- nptr:指定的字符串
- 返回值:
- 获取到的整形数据
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
//使用atoi将数字型字符串转化为整形数据
char s1[] = "7856";
int ret1 = atoi(s1);
printf("ret1 = %d\n",ret1);
//使用atof将浮点型的字符串转化为浮点型数据
char s2[] = "3.1415926";
double ret2 = atof(s2);
printf("ret2 = %lf\n", ret2);
return 0;
}
执行结果: