c++字符串和整数相互转换[整理]

    xiaoxiao2023-10-25  144

    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 中数值后的下一个字符(保留数值后面的字符串), 可以为nullptrbase -- 基数,必须介于 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 -- 数值后面第一个字符的地址,可以为nullptrbase -- 进制数, 默认为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().

     

    最新回复(0)