如何在C/C++中对字符串应用掩码

How to apply mask to string in C/C++?

本文关键字:字符串 应用 掩码 C++      更新时间:2023-10-16

我有一个家庭作业,但我不知道该做什么。

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

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

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

感谢

我的理解是,要求是找到与掩码匹配的所有字母序列。给定掩码: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.  

你需要有一些功能来测试一个字母的元音或辅音。

还可以考虑使用状态机。如果测试失败,您希望返回到启动状态。

先写下你的算法,一步一步。提出一些测试用例来验证您的算法。算法工作后,对其进行编码。使用相同的测试用例来验证程序。

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

我仍然不知道你想要完成什么,但也许知道一旦你在std::字符串中输入了你的输入,你就可以使用迭代器和任何算法迭代字符,这会有所帮助。以下是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/