大大大大大大大大大大大大大大大 2025-02-23 14:03 采纳率: 33.3%
浏览 13
已结题

零基础学C/C++160——字符串

零基础学C/C++160——字符串
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
给定两个由小写字母组成的字符串A和B,判断B中的字符是否全部在A中出现。
输入
输入为多组测试数据。
输入数据只有一行,包含2个字符串A和B,每个字符串后面有一个#字符标记(#不属于A或B),其中B字符串不为空,两个字符串长度均不超过1000000。
输出
如果B中的字符全部在A中出现,输出Yes,否则输出No。
样例输入 Copy
abc#ab#
样例输出 Copy
Yes

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-02-23 14:05
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    好的,我们来解决这个问题。我们需要判断字符串B中的每一个字符是否都在字符串A中出现。我们可以使用哈希表(在C++中可以使用unordered_set)来记录字符串A中出现的字符,然后检查字符串B中的每个字符是否都在这个集合中。

    以下是详细的解决方案:

    1. 读取输入:从标准输入读取多个测试用例。
    2. 处理每个测试用例
      • 使用一个unordered_set来存储字符串A中的字符。
      • 检查字符串B中的每个字符是否都在unordered_set中。
    3. 输出结果:如果所有字符都在集合中,则输出"Yes",否则输出"No"。

    下面是具体的代码实现:

    #include <iostream>
    #include <unordered_set>
    #include <string>
    
    using namespace std;
    
    int main() {
        string line;
        while (getline(cin, line)) {
            // 找到第一个 # 的位置
            size_t pos = line.find('#');
            if (pos == string::npos) {
                continue; // 如果找不到 #,则跳过这行
            }
    
            // 获取字符串A和B
            string A = line.substr(0, pos);
            string B = line.substr(pos + 1);
    
            // 使用 unordered_set 存储字符串A中的字符
            unordered_set<char> charSet(A.begin(), A.end());
    
            bool allCharsPresent = true;
            for (char ch : B) {
                if (ch == '#') break; // 遇到 # 则停止检查
                if (charSet.find(ch) == charSet.end()) {
                    allCharsPresent = false;
                    break;
                }
            }
    
            // 输出结果
            if (allCharsPresent) {
                cout << "Yes" << endl;
            } else {
                cout << "No" << endl;
            }
        }
        return 0;
    }
    

    代码解释

    1. 读取输入

      while (getline(cin, line)) {
          // 找到第一个 # 的位置
          size_t pos = line.find('#');
          if (pos == string::npos) {
              continue; // 如果找不到 #,则跳过这行
          }
      
    2. 获取字符串A和B

      string A = line.substr(0, pos);
      string B = line.substr(pos + 1);
      
    3. 使用 unordered_set 存储字符串A中的字符

      unordered_set<char> charSet(A.begin(), A.end());
      
    4. 检查字符串B中的每个字符是否都在unordered_set

      bool allCharsPresent = true;
      for (char ch : B) {
          if (ch == '#') break; // 遇到 # 则停止检查
          if (charSet.find(ch) == charSet.end()) {
              allCharsPresent = false;
              break;
          }
      }
      
    5. 输出结果

      if (allCharsPresent) {
          cout << "Yes" << endl;
      } else {
          cout << "No" << endl;
      }
      

    这样,我们就完成了对每个测试用例的处理,并正确地输出了结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月23日