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)。

  • 相关阅读:
    oracle学习篇十:序列
    oracle学习篇九:同义词
    oracle相关常识
    oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
    oracle学习篇八:约束
    oracle学习篇七:更新操作、事务处理
    oracle学习篇六:子查询
    oracle学习篇五:组函数,分组统计
    oracle学习篇四:多表查询
    oracle学习篇三:SQL查询
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/13562447.html
Copyright © 2011-2022 走看看