1. 利用库函数转化: atoi, stol, strtoi, itoa
atoi:
atoi()函数属于c标准库, 添加头文件<stdlib.h>.
atoi()函数原型
int atoi(const char *str)
- str -- 要转换为整数的字符串
函数描述: 將参数 str 所指向的字符串转换为一个整数(类型为 int 型).如果没有执行有效的转化, 返回一个零值.
strtol:
strtol()函数属于c标准库, 添加头文件<stdlib.h>.
strtol() 函数原型
long int strtol(const char *str, char **endptr, int base)
- str -- 要转换为长整数的字符串
- endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符(保留数值后面的字符串), 可以为nullptr
- base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0, 可以理解进制(10, 2, 16, 8)
函数描述: 將参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型)如果没有执行有效的转化, 返回一个零值.
注: atoi和strtol都是c里面的函数,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。
stoi:
stoi为string库中的函数, 需要添加头文件<string>
stoi函数原型
int stoi (const string& str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
- str -- 要转化程整型的string对象
- idex -- 数值后面第一个字符的地址,可以为nullptr
- base -- 进制数, 默认为10
函数描述: 將str 对象转换为一个整数(类型为 int 型). 如果转化成功, 返回转化后的整数. 如果转化失败, 会抛出异常, 所以在使用的时候应该有必要的异常处理.
itoa:
itoa()函数属于c标准库, 添加头文件<stdlib.h>.
char *itoa( int value, char *string,int radix);
- value -- 想要转化的数据
- string -- 目标字符串的地址
- redix -- 转化后的进制,如10, 16等
函数描述: 將一个整数转换为一个字符串, 返回指向这个字符串的指针.
2. 利用格式化函数: sprintf, sscanf
sprintf:
添加头文件<stdio.h>
函数原型:
int sprintf( char *buffer, const char *format, [ argument] … )
- buffer:char型指针,指向将要写入的字符串的缓冲区
- format:格式化字符串
- [argument]...:可选参数,可以是任何类型的数据
函数描述: 把格式化的数据写入某个字符串缓冲区。返回写入buffer 的字符数,出错则返回-1.
例子
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "student", ch = 'l';
int i = 35;
// 格式化并打印各种数据到buffer
sprintf( buffer, " String: %s\n", s );
sprintf( buffer, " Character: %c\n", ch);
sprintf( buffer, " Integer: %d\n", i );
return 0;
}
sscanf:
添加头文件<stdio.h>
函数原型:
int sscanf( const char *buffer, const char *format, [ argument ]...);
- buffer:char型指针,指向将要写入的字符串的缓冲区
- format:格式化字符串
- [argument]...:可选参数,可以是任何类型的数据
函数描述: 读取格式化的字符串中的数据。sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。成功则返回参数数目,失败则返回-1.
例子
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "student", ch = 'l';
int i = 35;
// 格式化并打印各种数据到buffer
sprintf( buffer, " String: %s\n", s );
sprintf( buffer, " Character: %c\n", &ch);
sprintf( buffer, " Integer: %d\n", &i );
return 0;
}
3. 利用stringstream类
添加头文件<sstream>
字符串到整数:
stringstream sstr(str);
int x;
sstr >> x;(即从sstr中提取数据)
整数到字符串:
stringstream sstr;
int x;
sstr << x;
string str = sstr.str();
注: stringstream不会主动释放内存, 重复使用需要清楚缓存,如stream.str("") 或 stream.clear().