[算法练习] 把字符串转换成整数
2015-10-12 10:09
417 查看
题目说明:
输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。程序代码:
#include <gtest/gtest.h> using namespace std; int StrToInt(const char* szValue, int nBase = 0, bool* bValid = NULL) { long long nValue = 0; int nSign = 1; if (bValid) { *bValid = false; } if (!szValue) { return 0; } if (nBase < 0 || nBase == 1 || nBase > 36) { return 0; } char cData = *szValue++; while(cData <= ' ') // skip whitespace { cData = *szValue++; } if (cData == '+') { cData = *szValue++; } else if(cData == '-') { cData = *szValue++; nSign = -1; } if (nBase==0) { if (cData != '0') nBase = 10; else if (*szValue == 'x' || *szValue == 'X') nBase = 16; else nBase = 8; } if (nBase == 16) { if (cData == '0' && (*szValue == 'x' || *szValue == 'X')) { szValue++; cData = *szValue++; } } while (cData != '\0') { int nData = 0; if (cData >= '0' && cData <= '9') { nData = cData-'0'; } else if (cData >= 'A' && cData <= 'Z') { nData = cData - 'A' + 10; } else if(cData >= 'a' && cData <= 'z') { nData = cData - 'a' + 10; } else { break; } if (nData >= nBase) // bad digit { break; } nValue = (nBase * nValue) + nData; if (nValue > std::numeric_limits<int>::max()) { nValue = 0; break; } cData = *szValue++; } if (bValid) { *bValid = (cData == '\0'); } return (int)(nSign * nValue); } TEST(Pratices, tStrToInt) { // NULL -> 0 // "" -> 0 // "0" -> 0 // "+123" -> 123 // "-123" -> -123 // "123" -> 123 ASSERT_EQ(StrToInt(NULL), 0); ASSERT_EQ(StrToInt(""), 0); ASSERT_EQ(StrToInt("0"), 0); ASSERT_EQ(StrToInt("+123"), 123); ASSERT_EQ(StrToInt("-123"), -123); ASSERT_EQ(StrToInt("123"), 123); // 16进制 // 0x10 -> 16 // 0x0 -> 0 // 0x123 -> 291 ASSERT_EQ(StrToInt("0x10"), 16); ASSERT_EQ(StrToInt("0x10",16), 16); ASSERT_EQ(StrToInt("0x0",16), 0); ASSERT_EQ(StrToInt("-0x123"), -291); // 8进制 // 010 -> 8 // 0123 -> 83 ASSERT_EQ(StrToInt("010"), 8); ASSERT_EQ(StrToInt("0123",8), 83); }
相关文章推荐
- java web登录页面上记住密码
- plsql远程访问数据库 解决ora-12541:TNS:无监听程序
- ARM Linux BenchMark
- POI生成Excel及下载
- Android MD5加签源代码算法
- vector和string优先于动态数组的分配
- Linux 技巧:让进程在后台可靠运行的几种方法
- 拷贝构造函数 与拷贝复制函数
- 【Unity】UnityEditor.UI.dll timestamps but is not known in guidmapper...
- MongoDB mapReduce操作
- http://ryewhisky.itpub.net/post/28330/298289
- monkeyrunner功能函数
- nmon的安装与使用
- ZOJ 3908 Number Game
- 《编程珠玑》2.3 将一个n元一维向量左旋转i个位置
- android 自定义按钮,点击变色,圆角
- Xcode 中Provisioning Profiles列表清理方法
- iOS xib布局小技巧-边框设置
- CocoaPods版本升级
- 表单属性问题readonly、disabled、checked,prop的使用