Используйте регулярные выражения.
Пример:
#include <iostream>
#include <string>
#include <regex>
int main(){
std::string text = "yyyyyy";
std::string sentence = "This is a yyyyyyyyyyyy.";
std::cout << "Text: " << text << std::endl;
std::cout << "Sentence: " << sentence << std::endl;
// Regex
std::regex y_re("y+"); // this is the regex that matches y yyy or more yyyy
// replacing
std::string r1 = std::regex_replace(text, y_re, "%y"); // using lowercase
std::string r2 = std::regex_replace(sentence, y_re, "%Y"); // using upercase
// showing result
std::cout << "Text replace: " << r1 << std::endl;
std::cout << "Sentence replace: " << r2 << std::endl;
return 0;
}
Вывод:
Text: yyyyyy
Sentence: This is a yyyyyyyyyyyy.
Text replace: %y
Sentence replace: This is a %Y.
Если вы хотите сделать его еще лучше, вы можете использовать:
// Regex
std::regex y_re("[yY]+");
Это будет соответствовать любому сочетанию строчных и прописных букв для любого количества символов «Y». Пример вывода с этим регулярным выражением:
Sentence: This is a yYyyyYYYYyyy.
Sentence replace: This is a %Y.
Это всего лишь простой пример того, что вы можете сделать с регулярным выражением, я бы порекомендовал взглянуть на саму тему, там много информации в SO идругие сайты.
Дополнительно: если вы хотите сопоставить перед заменой, чтобы заменить замену, вы можете сделать что-то вроде:
// Regex
std::string text = "yyaaaa";
std::cout << "Text: " << text << std::endl;
std::regex y_re("y+"); // this is the regex that matches y yyy or more yyyy
std::string output = "";
std::smatch ymatches;
if (std::regex_search(text, ymatches, y_re)) {
if (ymatches[0].length() == 2 ) {
output = std::regex_replace(text, y_re, "%y");
} else {
output = std::regex_replace(text, y_re, "%Y");
}
}