Textractor_test/extensions/removerepeat/removerepeat.cpp

41 lines
1.0 KiB
C++
Raw Normal View History

2018-11-04 11:26:27 +08:00
#include "../extension.h"
void RemoveRepeatedChars(std::wstring& sentence)
{
2018-09-23 03:45:54 +08:00
int repeatNumber = 0;
wchar_t prevChar = sentence[0];
2018-10-31 09:21:21 +08:00
for (auto c : sentence)
if (c == prevChar) repeatNumber++;
else break;
if (repeatNumber == 1) return;
for (int i = 0; i < sentence.size(); i += repeatNumber)
for (int j = i; j < sentence.size(); ++j)
if (sentence[j] != sentence[i])
if ((j - i) % repeatNumber != 0) return;
else break;
2018-09-13 14:50:03 +08:00
std::wstring newSentence = L"";
for (int i = 0; i < sentence.size(); i += repeatNumber) newSentence.push_back(sentence[i]);
2018-09-13 14:50:03 +08:00
sentence = newSentence;
}
void RemoveCyclicRepeats(std::wstring& sentence)
{
2018-11-15 13:06:49 +08:00
remove:
2018-11-28 05:54:19 +08:00
for (std::wstring junk = sentence; junk.size() > 4; junk.pop_back())
2018-11-15 13:06:49 +08:00
if (sentence.rfind(junk) > 0)
{
sentence.erase(0, junk.size());
goto remove;
}
}
2018-09-23 03:08:31 +08:00
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
{
2018-09-23 03:08:31 +08:00
if (sentenceInfo["hook address"] == -1) return false;
RemoveRepeatedChars(sentence);
RemoveCyclicRepeats(sentence);
return true;
}