字符串处理大数据小结
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献;
博客内容:字符串处理大数据小结;
博客时间:2014-3-27
编程语言:C++
编程坏境:Windows
编程工具:vs2008
-
引言
今天本想做题的,把英雄会上一个题目做出来,后来发现要用到自己以前写过的字符串处理函数,故就把以前的字符串函数总结一下,写了一些简明的注释,方便自己和大家用,特分享于此。
-
知识总结
1.我们都知道整形数据是有范围限制的,当超过整形表示范围后,可能溢出,所以用强大的字符串来处理大型数据是非常有用的,我们不着急于我们怎么去处理大数据,从小的做起,用字符串的形式模拟两个整数相加
程序结果演示如下
看完结果感觉还行吧,说明如下
// function 1: mode the add of int( (-3) + (-3) ) = - 6 // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相加操作,结果存在返回的字符串里
代码如下// mode the add of int string String::ADD_Int(string a,string b) { // exception of input if( a.empty() ) return b; else if( b.empty() ) return "0"; if(!check_all_number(a) || !check_all_number(b)) { return "exception of input ADD_Int"; } Standardization(a); Standardization(b); if(a[0] != '-' && b[0] != '-') return AddInt(a,b); else if(a[0] != '-'&& b[0] == '-') return MinusInt( a,b.substr( 1,b.size() ) ); else if(a[0] == '-'&& b[0] != '-') return MinusInt(b,a.substr(1,a.size())); else return '-'+AddInt(a.substr(1,a.size()),b.substr( 1,b.size() )); };
2.整形大数程序结果截图如下
代码说明如下
// function 2: make a-b mode int a - b; 7 - (-3) = 10 // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相减操作,结果存在返回的字符串里
算法代码如下// make a-b mode int a - b; string String::MINUS_Int(string a,string b) { // exception of input if( a.empty() ) return b; else if( b.empty() ) return "0"; if(!check_all_number(a) || !check_all_number(b)) { return "exception of input Multiplies_Int"; } Standardization(a); Standardization(b); if(a[0] != '-' && b[0] != '-') return MinusInt(a,b); else if(a[0] != '-' && b[0] == '-') return AddInt(a,b.substr(1,b.size())); else if(a[0] == '-' && b[0] != '-') return "-"+AddInt(a.substr(1,a.size()),b); else return MinusInt( b.substr(1,b.size()) , a.substr(1,a.size()) ); };
3.整形大数相乘程序运行结果如下
函数说明如下
// input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相乘操作,结果存在返回的字符串里
算法代码如下;// make a*b mode int a * b; string String::MULT_Int(string a,string b) { // exception of input if( a.empty() ) return b; else if( b.empty() ) return "0"; if(!check_all_number(a) || !check_all_number(b)) { return "exception of input Multiplies_Int"; } Standardization(a); Standardization(b); string::size_type i = a.size(),j = b.size(); string c = "0",d = ""; bool fushu = (a[0] == '-' && b[0] != '-')||(a[0] != '-' && b[0] == '-'); if(a[0] == '-') a = a.substr(1,a.size()); if(b[0] == '-') b = b.substr(1,b.size()); int jinwei = 0; for( j = b.size()-1 ; j < b.size() ;j--) { // each number of b to * a jinwei = 0; for( i = a.size()-1 ; i < a.size() ;i-- ) { d = IntToChar( ( CharToNumber(a[i]) * CharToNumber(b[j]) + jinwei ) % 10 )+ d ; jinwei = ( CharToNumber(a[i]) * CharToNumber(b[j]) + jinwei ) / 10 ; } if(jinwei) d = IntToChar(jinwei) +d; // add all number result c = ADD_Int(c,d); d = ""; unsigned int zero = 0 ; while( zero < b.size() - j ) { d = d + '0'; zero ++; } } Standardization(c); if( fushu