查找数字字符串并求和 (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;
}
经验分享 程序员 微信小程序 职场和发展