5.2 字符串中数字子串的求和
2017-04-11 11:15
190 查看
【题目】
给定一个字符串str,求其中全部数字串所代表的数字之和。
【要求】
1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。
2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。
【举例】
str="",返回36;
str="a-1b--2c--d6e",返回7;
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str;
getline(cin, str);
if (str == "" || str.size() == 0)
{
cout << 0 << endl;
return 0;
}
int count = 0, num = 0, cur = 0;
bool posi = true;
for (int i = 0; i < str.size(); i++)
{
cur = str[i] - '0';
if (cur < 0 || cur>9)
{
count += num;
num = 0;
if (str[i] == '-')
{
if (i - 1>-1 && str[i - 1] == '-')
posi = !posi;
else
posi = false;
}
else
posi = true;
}
else
{
num = num * 10 + (posi ? cur : -cur);
}
}
count += num;
cout << count << endl;
return 0;
}
【知识点】
1、关于数字字符和其ASCII的转换问题,int()就可以将字符转换为其ASCII值,同样char()将可以将值转换为其对应的字符,那么数字+‘0’就可以将数字转换为字符;同样,字符-‘0’就可以将字符转换为对应数字。
2、我做本题的失败之处:
①思维太常规,比如完全可以遇到非数字字符再累加,这样就省了一重循环。
②关于符号问题,完全可以由一个变量来实时更新,没必要再每次都计算负号的数量再算出负号。
③关于连续数字字符计算整数值(例1,2,3-》123)的问题可以很简单,没必要多加一重循环计算(num=num*10+cur).同样,想将数值转换为单个字符(例123-》1,2,3),可以循环用商对10求余。
给定一个字符串str,求其中全部数字串所代表的数字之和。
【要求】
1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。
2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。
【举例】
str="",返回36;
str="a-1b--2c--d6e",返回7;
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str;
getline(cin, str);
if (str == "" || str.size() == 0)
{
cout << 0 << endl;
return 0;
}
int count = 0, num = 0, cur = 0;
bool posi = true;
for (int i = 0; i < str.size(); i++)
{
cur = str[i] - '0';
if (cur < 0 || cur>9)
{
count += num;
num = 0;
if (str[i] == '-')
{
if (i - 1>-1 && str[i - 1] == '-')
posi = !posi;
else
posi = false;
}
else
posi = true;
}
else
{
num = num * 10 + (posi ? cur : -cur);
}
}
count += num;
cout << count << endl;
return 0;
}
【知识点】
1、关于数字字符和其ASCII的转换问题,int()就可以将字符转换为其ASCII值,同样char()将可以将值转换为其对应的字符,那么数字+‘0’就可以将数字转换为字符;同样,字符-‘0’就可以将字符转换为对应数字。
2、我做本题的失败之处:
①思维太常规,比如完全可以遇到非数字字符再累加,这样就省了一重循环。
②关于符号问题,完全可以由一个变量来实时更新,没必要再每次都计算负号的数量再算出负号。
③关于连续数字字符计算整数值(例1,2,3-》123)的问题可以很简单,没必要多加一重循环计算(num=num*10+cur).同样,想将数值转换为单个字符(例123-》1,2,3),可以循环用商对10求余。
相关文章推荐
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 求字符串中数字子串求和
- C++字符串数字子串求和
- 字符串中数字子串的求和
- [算法]字符串中数字子串的求和
- 字符串中数字子串的求和
- 改进版---字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串之数字子串求和
- 字符串中数字子串的求和
- 字符串问题---字符串中数字子串的求和
- [编程之美-08]字符串中数字子串的求和
- 对字符串中的数字子串求和
- 输入一个字符串,找出最长的数字子串,并指出从第几个字符开始
- 求一个字符串s的最大连续递增数字子串
- 取出字符串中的数字求和(c语言)
- 14.求字符串中的数字字符转化为数字并求和