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().