目录
1 字符串转整形数据
1.1 函数功能
1.2 示例程序
2 字符串转浮点型数据
2.1 函数介绍
2.2 示例程序
3 数字转字符串
3.1 函数介绍
3.2 函数原型
在编程中,经常会需要将数字组成的字符串转换为相应的数字、或者将数字转换为字符串,在 C 函数库中同样也提供了相应的函数, 本小节就向大家介绍这些函数的用法。
1 字符串转整形数据
1.1 函数功能
C 函数库中提供了一系列函数用于实现将一个字符串转为整形数据,主要包括 atoi()、 atol()、 atoll()以及strtol()、 strtoll()、 strtoul()、 strtoull()等。下面是每个函数的详细原型、作用和参数解释:
atoi() 函数:将字符串 str
转换为整型 (int
) 数值。
atol() 函数:将字符串 str
转换为长整型 (long
) 数值。
atoll() 函数:将字符串 str
转换为长长整型 (long long
) 数值。
int atoi(const char *str);
long atol(const char *str);
long long atoll(const char *str);
str
:指向待转换的以字符串形式表示的整数的字符数组。
strtol() 函数:将字符串 str
转换为长整型 (long
) 数值,支持指定基数。
strtoll() 函数:将字符串 str
转换为长长整型 (long long
) 数值,支持指定基数。
strtoul() 函数:将字符串 str
转换为无符号长整型 (unsigned long
) 数值,支持指定基数。
strtoull() 函数:将字符串 str
转换为无符号长长整型 (unsigned long long
) 数值,支持指定基数。
long strtol(const char *str, char **endptr, int base);
long long strtoll(const char *str, char **endptr, int base);
unsigned long strtoul(const char *str, char **endptr, int base);
unsigned long long strtoull(const char *str, char **endptr, int base);
str
:指向待转换的字符串。endptr
:如果非空指针,函数在这里存储一个指向第一个无法进行转换的字符的指针。base
:数值基数,范围从2到36。如果为0,基数将从字符串中推断(例如,"0x"前缀表示16进制)。
1.2 示例程序
下面的示例程序使用 atoi()
、atol()
、atoll()
、strtol()
、strtoll()
、strtoul()
和strtoull()
函数将用户通过键盘输入的字符串转换为不同的整数类型。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char input[256]; // 假设输入字符串不会超过255个字符// 提示用户输入一个字符串printf("请输入一个数字字符串:");fgets(input, sizeof(input), stdin); // 使用fgets读取一行输入input[strcspn(input, "\n")] = 0; // 去除末尾的换行符// 使用atoi转换字符串为intint intValue = atoi(input);printf("atoi转换结果为int类型:%d\n", intValue);// 使用atol转换字符串为longlong longValue = atol(input);printf("atol转换结果为long类型:%ld\n", longValue);// 使用atoll转换字符串为long longlong long longLongValue = atoll(input);printf("atoll转换结果为long long类型:%lld\n", longLongValue);// 使用strtol转换字符串为long,并可以获取剩余字符串char *endPtr;long strtolValue = strtol(input, &endPtr, 10); // 假设输入为十进制printf("strtol转换结果为long类型:%ld\n", strtolValue);// 使用strtoll转换字符串为long longlong long strtollValue = strtoll(input, &endPtr, 10); // 假设输入为十进制printf("strtoll转换结果为long long类型:%lld\n", strtollValue);// 使用strtoul转换字符串为unsigned longunsigned long strtoulValue = strtoul(input, &endPtr, 10); // 假设输入为十进制printf("strtoul转换结果为unsigned long类型:%lu\n", strtoulValue);// 使用strtoull转换字符串为unsigned long longunsigned long long strtoullValue = strtoull(input, &endPtr, 10); // 假设输入为十进制printf("strtoull转换结果为unsigned long long类型:%llu\n", strtoullValue);return 0;
}
运行结果如下:
2 字符串转浮点型数据
2.1 函数介绍
atof()
、strtod()
、strtof()
和 strtold()
是C语言标准库中用于将字符串转换为浮点数的函数。下面是这些函数的原型、作用、参数说明以及一个示例程序:
atof() 函数:将字符串转换为双精度浮点数 (double
)。
strtod() 函数:将字符串转换为双精度浮点数 (double
),可以获取剩余字符串。
strtof() 函数:将字符串转换为单精度浮点数 (float
),可以获取剩余字符串。
strtold() 函数:将字符串转换为长双精度浮点数 (long double
),可以获取剩余字符串。
函数原型如下:
double atof(const char *str);
double strtod(const char *str, char **endptr);
float strtof(const char *str, char **endptr);
long double strtold(const char *str, char **endptr);
str
:指向待转换的以字符串形式表示的浮点数的字符数组。endptr
:如果非空指针,函数在这里存储一个指向第一个无法进行转换的字符的指针。
2.2 示例程序
程序提示用户输入一个数字字符串,接着使用 atof()
、strtod()
、strtof()
和 strtold()
函数将字符串转换为不同的浮点数类型,并打印出转换后的值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char input[256]; // 用于存储用户输入的字符串// 提示用户输入字符串printf("请输入一个数字字符串:");fgets(input, sizeof(input), stdin);input[strcspn(input, "\n")] = 0; // 去除字符串末尾的换行符// 使用atof转换字符串,并打印结果double atofValue = atof(input);printf("atof转换结果:%f (double类型)\n", atofValue);// 使用strtod转换字符串,并打印结果及可能的剩余字符串char *endPtr;double strtodValue = strtod(input, &endPtr);printf("strtod转换结果:%f ,剩余字符串:%s\n", strtodValue, endPtr ? endPtr : "");// 使用strtof转换字符串,并打印结果及可能的剩余字符串float strtofValue = strtof(input, &endPtr);printf("strtof转换结果:%f ,剩余字符串:%s\n", strtofValue, endPtr ? endPtr : "");// 使用strtold转换字符串,并打印结果及可能的剩余字符串long double strtoldValue = strtold(input, &endPtr);printf("strtold转换结果:%Lf ,剩余字符串:%s\n", strtoldValue, endPtr ? endPtr : "");return 0;
}
运行结果如下:
3 数字转字符串
3.1 函数介绍
sprintf()
和 snprintf()
是C语言中用于格式化输出到字符串的函数。sprintf()
函数将格式化的数据写入到一个字符串中,而 snprintf()
函数提供了一种更安全的方式来执行相同的任务,因为它允许你指定最大写入的字符数,从而避免缓冲区溢出。
函数说明:
- sprintf() 函数:根据指定的格式将数据写入到字符串中。
- snprintf() 函数:类似于
sprintf()
,但限制了写入的最大字符数。
函数原型:
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
str
:指向用于存储输出的字符串的指针。format
:格式字符串,定义了后续参数如何格式化。
3.2 函数原型
示例程序使用 sprintf()
和 snprintf()
函数将用户通过键盘输入的数字格式化为字符串,程序首先提示用户输入一个数字和一个希望的输出字符串的最大长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_BUFFER_SIZE 100int main()
{char buffer[MAX_BUFFER_SIZE]; // 存储格式化后的字符串double num; // 用户输入的数字,这里使用double以支持小数size_t size; // 用户希望的输出size(包括空字符终止符)// 提示用户输入一个数字printf("请输入一个数字(可以是整数或小数):");scanf("%lf", &num); // %lf用于读取double类型的数字// 清除缓冲区中的残留输入while (getchar() != '\n') continue;// 提示用户输入希望的输出sizeprintf("请输入希望的输出字符串的最大长度:");scanf("%zu", &size);// 检查size是否超出了buffer的最大大小size = size > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : size;// 使用sprintf将数字格式化为字符串sprintf(buffer, "%.2f", num); // %.2f表示格式化为小数点后两位printf("使用sprintf格式化的字符串: %s\n", buffer);// 清空buffer以便重新使用memset(buffer, 0, sizeof(buffer));// 使用snprintf将数字格式化为字符串,指定最大输出sizesnprintf(buffer, size, "%.2f", num);printf("使用snprintf格式化的字符串: %s\n", buffer);return 0;
}
程序运行结果如下: