查找数字字符串并求和 (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项目控制台中文乱码