21xrx.com
2024-12-22 22:42:54 Sunday
登录
文章检索 我的文章 写文章
C++中实现字符串转整形
2023-07-05 12:05:55 深夜i     --     --
C++ 字符串 整形 转换 实现

在C++中,字符串转整型是一个常见的操作,当我们需要从用户输入中获取数字的时候,获取到的是字符串类型,需要将其转化为整型才能进行后续的计算和操作。本文将介绍字符串转整型的实现方法。

方法一:使用C++自带的库函数

C++中的字符串类std::string,提供了一些有用的转换函数,如std::stoi()。这个函数可以将字符串转换为整型,它的原型为:


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

其中,str为需要转换为整型的字符串,idx参数用于输出首次被未转换字符的索引,base是数值转换使用的进制数,默认值为10。

示例代码:


#include <iostream>

#include <string>

using namespace std;

int main()

{

  string str = "12345";

  int num;

  num = stoi(str);

  cout << "转换后的整型为:" << num << endl;

  return 0;

}

方法二:手写转换函数

当我们需要实现自己的字符串转整型函数时,可以根据字符和数字的ASCII码值进行计算。具体实现方法如下:

将字符串从左至右依次取出每个字符,计算出它所代表的数字,并累加到结果中,同时将结果乘以10。重复以上步骤,直到处理完所有字符。

在上面的算法中,我们需要注意以下几点:

1. 字符串可能包含正负符号,需要分别处理。

2. 字符串开头可能包含空格,需要跳过。

3. 字符串可能包含非数字字符,需要跳过。如果遇到非数字字符,需要停止转换并返回结果。

4. 为了避免整型溢出,我们需要在每次处理完一个字符之后判断结果是否超出了整型的范围。

示例代码:


#include <iostream>

#include <string>

using namespace std;

bool is_digit(char ch)

  return ch >= '0' && ch <= '9';

int atoi(string s)

{

  int res = 0;

  int i = 0, sign = 1;

  // 跳过开头的空格

  while (s[i] == ' ')

  {

    i++;

  }

  // 判断正负号

  if (s[i] == '-')

  {

    sign = -1;

    i++;

  }

  else if (s[i] == '+')

  {

    i++;

  }

  // 转换数字

  while (is_digit(s[i]))

  {

    if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (s[i] - '0') > INT_MAX % 10))

    {

      return sign == -1 ? INT_MIN : INT_MAX;

    }

    res = res * 10 + (s[i] - '0');

    i++;

  }

  return sign * res;

}

int main()

{

  string str = "12345";

  int num;

  num = atoi(str);

  cout << "转换后的整型为:" << num << endl;

  return 0;

}

综上所述,在C++中实现字符串转整型的方法有两种,一种是使用自带的库函数,另外一种是手写转换函数。不同的应用场景和需求,可以根据实际情况选择不同的方法。无论是哪种方法,我们都需要注意 Exception 的处理,避免程序崩溃和数据丢失。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复