zoukankan      html  css  js  c++  java
  • 37. 字符串转换为整数

    一. 问题

    给定一个由 0 到 9 的 n 个数字组成的字符串 S,描述一个将 S 转换成它表示的整数的有效算法。算法的运行时间是多少?

    二. 思路

    按照题目,我们假设给定字符串为 S = “12345”,可以看出,字符串 S 中含有 5 个字符,那么我们怎么将它们转换成相应整数?先将问题进行简化,不考虑约束条件,比如字符串包含的元素太多,转换成整数以后,有可能溢出之类的问题。就用给定字符串为例,S 转换以后,得到的整数显然是 12345。那么我们按元素的位置进行分解。因为是十进制,所以底数是 10。这样用我们学过的十进制,先将字符串分解,再用对应位置相乘,再将每个结果累加,最后的和就是要求的整数。

    三. 代码实现

     1 int string_to_int(const string& str) {
     2     int result = 0;
     3     map<char, int> char_to_num;
     4     int i = 0;
     5     for (char ch = '0'; ch <= '9'; ++ch) {
     6         char_to_num[ch] = i;
     7         ++i;
     8     }
     9 
    10     for (int j = 0, k = str.size() - 1; j < str.size(); ++j, --k) {
    11         int temp_sum = char_to_num[str[j]] * pow(10, k);
    12         result += temp_sum;
    13     }
    14 
    15     return result;
    16 }

    (1)代码分析

    可以看出,我们传入了一个字符串。在函数中, result 用来保存最终结果。函数中用到了 map,它的作用是将每个字符与整数对应起来,因为我们只需要处理 0 到 9 这 10个字符,所以用 map 进行一一对应。第 5 到 8 行进行了这个操作。接下来,我们对字符串进行分解,再 map 中找到每个字符对应的值,然后进行十进制转换,顺便做累加,执行完以后,得到的结果就是整个字符串对应的整数。

    (2)算法正确性证明

    算法一开始,将可能会用到的字符作了与数字一一对应的操作,因此不会漏掉任何一个字符。接着对字符串进行分解,当到达字符串结尾的时候,已经将每一个和都计算出来,并且将结果存入了 result 中,所以运算结束以后,最终的结果是就是字符串所对应的整数。不难看出,算法的时间复杂度是 O(n)。

  • 相关阅读:
    文本中溢出的文字在结尾显示为三个点
    git bash 如何建分支
    git本地仓库和远程仓库连接
    button不能直接添加href属性实现页面跳转
    【JAVA】【集合9】ArrayList和Vector区别
    【JAVA】【集合8】Java中的Vector
    【JAVA】【集合7】Java中的ArrayList
    【JAVA】【集合6】Java中的Collections工具类
    【JAVA】【集合5】Java中的List接口
    【JAVA】【集合4】Java中的Collection接口
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/13562447.html
Copyright © 2011-2022 走看看