思路: 遍历字符串, 根据ASCII码 0x30 - 0x39为数字的特点找出数字, 将字符串中的数字转换为Int存储下来, 相加, 再将Int数字转换为字符串, 填入源字符串对应位置.
代码: vs2012测试通过, 其他版本应该也没问题
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int findFirstNum(int*, int);
int convertToInt(string);
void getRealNum(int*, int*, string, int*);
string convertToString(int);
int main()
{
string strFields1 = "^小明语文考了100分,妈妈给他了10元钱作为奖励,小明花了5元买了一个冰激凌,又花了4元买了一本漫画书,剩下的1元存进了储蓄罐!";
string strFields2 = "^小明语文考了120分,妈妈给他了20元钱作为奖励,小明花了10元买了一个冰激凌,又花了5元买了一本漫画书,剩下的5元存进了储蓄罐!";
//string strFields1 = "我有1000个银币, 投入了20个箱子, 56个猴子出来了";
//string strFields2 = "我有2000个银币, 投入了40个箱子, 16个猴子出来了";
int pointnum1[100];
int pointnum2[100];
int realnum1[100];
int realnum2[100];
int realnum3[100];
int firstnum1[100];
int firstnum2[100];
string num[100];
memset(pointnum1,0,100*sizeof(int));
memset(pointnum2,0,100*sizeof(int));
memset(realnum1,0,100*sizeof(int));
memset(realnum2,0,100*sizeof(int));
memset(realnum3,0,100*sizeof(int));
memset(firstnum1,0,100*sizeof(int));
memset(firstnum2,0,100*sizeof(int));
getRealNum(realnum1,pointnum1,strFields1,firstnum1);
getRealNum(realnum2,pointnum2,strFields2,firstnum2);
cout << "字符串1: "<< strFields1 << endl;
cout << "字符串2: "<< strFields2 << endl << endl;
int i;
for(i=0;i<100;i++)
{
if(realnum1[i] == 0) break;
realnum3[i] = realnum1[i] + realnum2[i];
num[i] = convertToString(realnum3[i]);
strFields2.replace(firstnum2[i], num[i].length(), num[i]);
cout << "数字1: " << realnum1[i] << endl;
cout << "数字2: " << realnum2[i] << endl;
cout << "数字和: " << realnum3[i] << endl << endl;
}
cout << "最后输出结果: "<< strFields2 << endl;
system("pause");
}
int findFirstNum(int* p, int s)
{
while(p[s-1] - p[s-2] == 1)
{
s -= 1;
}
return p[s-1];
}
int convertToInt(string s)
{
int num;
stringstream ss;
ss << s;
ss >> num;
return num;
}
void getRealNum(int* realnum1, int* pointnum, string s, int* firstnum)
{
int p_size = 0;
int r_size = 0;
bool isnum = false;
for(int i=0;i<(int)s.length();i++)
{
if(s.at(i) >= 0x30 && s.at(i) <= 0x39)
{
pointnum[p_size] = i;
p_size++;
isnum = true;
continue;
}
if(isnum)
{
isnum = false;
firstnum[r_size] = findFirstNum(pointnum, p_size);
string number = s.substr(firstnum[r_size], 5);
realnum1[r_size] = convertToInt(number);
r_size++;
}
}
}
string convertToString(int num)
{
string s;
ostringstream oss;
oss << num;
s = oss.str();
return s;
}
温馨提示:答案为网友推荐,仅供参考