【问题标题】:How to apply mask to string in C/C++? [closed]如何在 C/C++ 中对字符串应用掩码? [关闭]
【发布时间】:2013-12-09 18:04:54
【问题描述】:

我被分配了一项家庭作业,但我不知道具体要做什么。

输入文件是从'a'到'z'的字母随机生成的。用户将只键入带有 0/1 的掩码,例如 011011,其中 1 表示元音,0 表示辅音。

输出将是在输入中找到的与用户指定掩码匹配的所有匹配项(例如,对于 011011,输出将是 abbezz)。

知道怎么做吗?我不要求代码,而只是要求如何在 c/c++ 中实现这一点的最简单方法。

谢谢

【问题讨论】:

  • 请更清楚地描述问题。最好提供示例。
  • 敷面膜是为了什么?假设是什么输出?
  • 抱歉,太困了,更新了。
  • 如果这是家庭作业,你的课是C还是C++?语言不一样,你应该避免标记两者。

标签: c++ c string mask


【解决方案1】:

我的理解是,要求是找到与掩码匹配的所有字母序列。 给定掩码:010(辅音、元音、辅音)
以下是几个单词的匹配项:

"are" - fail, first character is a vowel.  
"mat" - pass, 'm' is a consonant, 'a' is a vowel, 't' is a consonant.  
"mate" - fail, too many letters.  

您将需要一些函数来测试字母的元音或辅音。

还可以考虑使用状态机。如果测试失败,您想回到起始状态。

先一步一步写下你的算法。拿出几个测试用例来验证你的算法。算法工作后,将其编码。使用相同的测试用例来验证程序。

【讨论】:

    【解决方案2】:

    根据您拥有的规则将字符串映射到 0/1,并在新字符串中搜索与掩码匹配的子字符串。

    【讨论】:

      【解决方案3】:

      我仍然不知道你想要完成什么,但也许知道一旦你在 std::string 中输入了输入,你就可以使用迭代器和任何算法迭代字符。这是std::for_each 的示例:

      #include <algorithm>
      #include <iostream>
      #include <string>
      
      void applyMask(std::string::reference aCharacter)
      {
          // apply your mask here, character by character
      
          if ('a' == aCharacter) {
              aCharacter = 'A';
          }
      }
      
      int main()
      {
          std::string s("stackoverflow");
      
          std::for_each(s.begin(), s.end(), &applyMask);
      
          std::cout << s << std::endl;
      }
      

      您可能想看看std::transform,例如http://www.cplusplus.com/reference/algorithm/transform/

      【讨论】:

        猜你喜欢
        • 2017-11-04
        • 1970-01-01
        • 2015-02-23
        • 2014-01-22
        • 1970-01-01
        • 2019-10-10
        • 2019-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多