C++:以空格分隔的字符串的输入输出

vivo2022届提前批校招笔试题

幸运员工

题目描述

选出工号中含有数字7或是7的倍数的幸运员工。

输入描述

一组空格分隔的员工工号列表

输出描述

幸运员工总人数,未找到时输出0

#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;

class Solution {
public:
	int findSeven(vector<int>& nums) {
		int count = 0;	//没有找到就返回0
		for (int x : nums) {
			if (x % 7 == 0) {
				//7的倍数
				count++;
			}
			else {
				//含有数字7
				while (x) {
					int m = x % 10;
					if (m == 7) {
						//x中一旦找到7就退出循环
						count++;
						break;
					}
					x /= 10;
				}
			}
		}
		return count;
	}
};

int main() {
	string s;						//保存从控制台输入的字符串
	vector<int> numbers;			//拆分后的数字
	getline(cin, s);
	while (!s.empty()) {
		int loc = s.find(" ");		//寻找空格在字符串s中的位置
		if (loc == string::npos) {	//没有找到空格,说明到了最后一个位置
			numbers.push_back(stoi(s));	
			s.clear();
			break;	//清除字符串s并退出循环
		}
		string s_tmp = s.substr(0, loc);	//从0开始往后数loc个字符
		numbers.push_back(stoi(s_tmp));
		s.erase(0, loc + 1);				//擦除从0开始往后数loc+1个字符,包括擦除空格
	}
	Solution sol;
	int res = sol.findSeven(numbers);
	cout << res << endl;
}

stringfind函数的返回值是查找字母在字符串中的位置。没有找到,则会返回npos

工号数字分为三种情况:

  1. 仅为7的倍数,如:105140
  2. 仅为含有7的数,如:105720、770251
  3. 既是7的倍数又是含有7的数,如:700000

第一种情况没有什么疑问,count只自增一个就进入下一个循环。

第二种情况要注意,一个号码里有多个7的情况,不要对count进行多次自增操作,具体做法就是一旦检测到7就及时进入下一个循环。

第三种情况,既是7的倍数又含有7,同样注意不要多次自增,具体解决方法就是将两种情况用if-else语句分割,确定这个数符合一种情况就及时进入下一个循环,避免重复计数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值