查找数字字符串并求和 (8 分)
从键盘输入任意字符串,查找字符串中的所有数字字符串。若无数字字符串,则输出“No digits",若有数字子串,则找到所有数字子串并求它们的和。 注意:数字可能有实数的子串。
输入格式:
输入任意字符串。
输出格式:
若无数字字符串,则输出“No digits",若有数字子串,则找到所有数字子串并求它们的和。
输入样例:
在这里给出一组输入。例如:
34euitye87.89df37.903jdhf374
输出样例:
在这里给出相应的输出。例如:
533.793
#include<bits/stdc++.h>
using namespace std;
vector<char> v[10004];
int main() {
string s;
getline(cin, s);
int j = 1,ansflag=0;
for (int i = 0;i < s.size();i++) {
if (s[i] >= 0 && s[i] <= 9) ansflag=1;
}//答案的标记变量
for (int i = 0;i < s.size();i++,j++) {
while (s[i] >= 0 && s[i] <= 9||s[i]==.)
{
v[j].push_back(s[i]);
i++;
}
}
int len;
float sum = 0;
for (int t = 1;t <= j;t++) {
int flag = 0;
vector<char>::iterator it = v[t].begin(),it1;
for (;it != v[t].end();it++) {
if (*it == .) {
flag = 1;
it1 = it;
}
}
if(flag==0)
{
for (int i = 0;i < v[t].size();i++) {
int len = v[t].size() - i;
sum += (v[t][i] - 0) * pow(10, len - 1);
}
}
else {
int x = v[t].end() - it1 - 1;//记小数点在倒数第几位
v[t].erase(it1);
for (int i = 0;i < v[t].size();i++) {
int len = v[t].size() - i;
sum += (v[t][i] - 0) * pow(10, len - 1-x);
}
}
}
if (!ansflag) {
cout << "No digits";
return 0;
}
cout << sum << endl;
}
如一个字母sadnw 转成26进制 字符串hash
int id=0;
for()
{
id=id*26+s[i]-a;
}
上一篇:
IDEA上Java项目控制台中文乱码
