我有一個C++函數,其接受字符串在以下格式加倍通過分隔符:允許用戶通過其在C++
<WORD>: [VALUE]; <ANOTHER WORD>: [VALUE]; ...
這是函數:
std::wstring ExtractSubStringFromString(const std::wstring String, const std::wstring SubString) {
std::wstring S = std::wstring(String), SS = std::wstring(SubString), NS;
size_t ColonCount = NULL, SeparatorCount = NULL; WCHAR Separator = L';';
ColonCount = std::count(S.begin(), S.end(), L':');
SeparatorCount = std::count(S.begin(), S.end(), Separator);
if ((SS.find(Separator) != std::wstring::npos) || (SeparatorCount > ColonCount))
{
// SEPARATOR NEED TO BE ESCAPED, BUT DON'T KNOW TO DO THIS.
}
if (S.find(SS) != std::wstring::npos)
{
NS = S.substr(S.find(SS) + SS.length() + 1);
if (NS.find(Separator) != std::wstring::npos) { NS = NS.substr(NULL, NS.find(Separator)); }
if (NS[NS.length() - 1] == L']') { NS.pop_back(); }
return NS;
}
return L"";
}
以上功能正確地輸出MANGO
如果我使用它像:
ExtractSubStringFromString(L"[VALUE: MANGO; DATA: NOTHING]", L"VALUE")
但是,如果我有兩個轉義分隔符在下面的字符串,我試着像;;
翻番,但我仍然得到MANGO
代替;MANGO;
:
ExtractSubStringFromString(L"[VALUE: ;;MANGO;;; DATA: NOTHING]", L"VALUE")
在這裏,價值分配器是冒號和分隔符是分號。我希望允許用戶通過將額外的倍數加倍來將冒號和分號傳遞給我的函數。就像我們在很多腳本語言和編程語言中使用雙引號,單引號和許多其他語言一樣,也使用許多程序命令的參數。
我以爲很難,但甚至想不出一種辦法。任何人都可以在這種情況下幫助我嗎?
在此先感謝。
*加倍額外的人* - 爲什麼不遵循這樣的事情,並在前面加上事實上的約定「\」如果它被認爲是一個文字字符而不是分隔符的話?加倍這樣的項目使得這項工作變得更加困難,海事組織 - 當你看到一個「\」時,你知道下一個字符被認爲是沒有特殊意義的文字字符。 – PaulMcKenzie
我會建議查找json - 爲什麼要重新發明輪子? – UKMonkey
@AlexG那麼如果string包含';;;'? – Blueeyes789