区别itoa、atoi、stoi函数的用法

本文仅作为博主笔记,难免出现错误,望各位指出。转载需注明原文作者。

atoi

头文件

<stdlib.h>

 

用法

将字符串形式的数字转换为整型数字。

 

函数原型

int atoi (const char * str);

 

扩展

此外还有atof:字符串转double型

atol:字符串转long型

atoll:字符串转long long型

如果函数参数str为string型,则需要用c_str()函数转换为 const char *型便能通过编译

 

用法举例

1
2
3
4
5
6
7
8
9
/* atoi */
#include <stdlib.h>
#include <stdio.h>
 
int main(){
    char a[5] = "2110";
    printf("%d\n", atoi(a));
    return 0;
}

 

1
2
3
4
5
6
7
8
9
10
/* string和atof */
#include <string>
#include <stdlib.h>
#include <stdio.h>
 
int main(){
    string a = "123.123";
    printf("%.3lf\n", atof(a.c_str()));
    return 0;
}

 

itoa

头文件

<stdlib.h>

 

用法

  1. 对应atoi,将整型数字转换为字符串型数字。
  2. 十进制转x进制

 

函数原型

char *  itoa ( int value, char * str, int base );

value表示原值,str表示转换后的值,base表示转换进制。

 

扩展

另一种整型转字符型的方法:

sprintf(str, "%d", num);    // num为整型,保存到字符串str中。

 

用法举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
  int i = 2110;
  char buffer [5];
  itoa (i,buffer,10);               // 直接转char型
  printf ("decimal: %s\n",buffer);
  itoa (i,buffer,16);               // 直接转十六进制
  printf ("hexadecimal: %s\n",buffer);
  itoa (i,buffer,2);                // 直接转二进制
  printf ("binary: %s\n",buffer);
  return 0;
}

 

stoi(C++11)

头文件

<string>

 

用法

  1. string型转整型
  2. x进制转十进制

 

函数原型

int stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

 

用法举例(参考C++ Reference)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>   // std::cout
#include <string>     // std::string, std::stoi
 
int main ()
{
  std::string str_dec = "2001, A Space Odyssey";
  std::string str_hex = "40c3";
  std::string str_bin = "-10010110001";
  std::string str_auto = "0x7f";
 
  std::string::size_type sz;   // alias of size_t
 
  int i_dec = std::stoi (str_dec,&sz);
  int i_hex = std::stoi (str_hex,nullptr,16);
  int i_bin = std::stoi (str_bin,nullptr,2);
  int i_auto = std::stoi (str_auto,nullptr,0);
 
  std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";
  std::cout << str_hex << ": " << i_hex << '\n';
  std::cout << str_bin << ": " << i_bin << '\n';
  std::cout << str_auto << ": " << i_auto << '\n';
 
  return 0;
}