文档中的三道编程题目主要涉及了C++编程语言的基础知识,包括字符串处理、集合操作、时间区间匹配以及表达式计算等。下面是每道题目的详细解释:
1. 去除字符串重复字符:
这是一道关于字符串处理的问题,要求编写程序删除字符串中重复的字符,只保留首次出现的字符,并保持原有顺序。实现方法是使用`unordered_set`来存储已经遇到过的字符,如果字符未在集合中出现过,则将其插入到结果字符串`outstr`中。在主函数`main`中,通过`getline`读取输入的字符串,然后遍历每个字符,利用`unordered_set`的`find`方法检查字符是否已存在,最后输出结果。
2. 匹配时间段和人员活动:
此问题涉及到区间匹配和映射的数据结构使用。给定一个人员活动的时间段数组和一组人员活动时间段,需要统计每个人员活动覆盖了多少个时间段。使用`map`存储每个时间段被覆盖的次数,遍历人员活动,再遍历所有时间段,判断人员活动是否完全包含在某个时间段内,若满足条件则增加对应时间段的计数。输出每个时间段及其覆盖次数。
3. 计算中缀表达式:
这是一个中缀表达式的求值问题,要求根据输入的中缀表达式计算结果。采用两个栈,一个用于存储数字,另一个用于存储运算符。程序逐字符处理输入字符串,遇到空格跳过,遇到运算符则根据优先级处理,遇到数字则转换为整数并压入数字栈。遇到右括号时,弹出运算符并执行相应的运算,直到遇到左括号为止。若处理过程中遇到错误,如运算符优先级错误或非法字符,结果设置为-1。数字栈顶部的元素即为表达式的结果。
以上三道题目涵盖了C++的基础语法、容器(如`unordered_set`、`vector`、`stack`、`map`)的操作以及算法(如区间匹配、中缀表达式求值)。对于求职者来说,熟悉这些知识对于面试和实际工作中解决问题至关重要。