<string.h> 头文件中的字符串函数
标准库的头文件 <string.h> 中,有三个常用的字符串函数:
函数名 | 描述 |
strlen(str) | 返回str的长度,类型是 size_t |
strcpy(str1,str2) | 将str2中的字符串复制到str1中 |
strcat(str1,str2) | 将 str2 中的字符串追加到 str1 后面 |
<stdio.h> 头文件中的格式写入和提取函数
标准库的头文件 <stdio.h> 中,也有两个字符串函数:
sprintf(),用于将格式化数据写入字符串。相比于 printf(),多了一个参数,第一个参数是要写入的字符串,后面参数与 printf() 一致。简单地讲,sprintf() 是将内容写入字符串而不是输出。
sscanf(),用于从一个字符串中按照指定的格式提取数据。相比于 scanf(),多了一个参数,第一个参数是要提取数据的字符串,后面参数与 scanf() 一致。简单地讲,sscanf() 是从字符串中提取数据而不是从用户输入提取数据。
char buffer[100];
int num = 123;
float pi = 3.1415;
sprintf(buffer, "整数: %d, 浮点数: %.2f", num, pi);
// buffer 内容变为:"整数: 123, 浮点数: 3.14"
char input[] = "Name: Alice, Age: 25, Score: 95.5";
char name[20];
int age;
float score;
sscanf(input, "Name: %s, Age: %d, Score: %f", name, &age, &score);
// name = "Alice", age = 25, score = 95.5
高级用法
指定读取/写入的字符数:
char str[10];
sscanf("123456", "%4s", str); // 只读取前4个字符 → str="1234"
sprintf(str, "%6d", 123); // 输出宽度为6,不足补空格 → " 123"
用 *
跳过不需要的数据:
int year, month;
sscanf("2023-09-15", "%d-%*d-%d", &year, &month); // 跳过中间的 "09"
// year=2023, month=15
使用 %[...]
或 %[^...]
提取特定内容:
char date[] = "2023/09/15";
int y, m, d;
sscanf(date, "%d/%d/%d", &y, &m, &d); // 用 '/' 分隔 → y=2023, m=9, d=15
<time.h>头文件中日期时间相关函数
函数名 | 描述 |
time(&变量) | 获取当前日期赋值到变量中,该变量需是 time_t 类型 |
ctime(&时间值) | 将时间值转为字符串并返回,时间值需是 time_t 类型 |
difftime(时间值1,时间值2) | 返回两个时间值的差,返回值是 double 类型,时间值需是 time_t 类型 |
注意:
time_t 是C语言中用于表示时间值的数据类型,它通常是一个整数类型(int 或 long 或 long long),用于存储时间戳。
时间戳是指从1970年1月1日(通常称为UNIX纪元)零时零分零秒(UTC时间)起至某一特定时刻所经过的秒数。
<math.h>头文件中数学相关函数
函数名 | 描述 |
sqrt(x) | 计算平方根 |
cbrt(x) | 计算立方根 |
pow(x,y) | 计算x的y次方 |
fabs(x) | 计算x的绝对值 |
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
round(x) | 四舍五入取整 |
trunc(c) | 截断小数部分 |
注意:以上函数的参数与返回值的类型都是 double 类型。