c++之面試題(2)實現字串的分割函式SplitStr
阿新 • • 發佈:2020-12-23
題目描述
3.實現一個將字串按指定字元分隔的函式,形式已經確定如下,請完成標有“//請補充”的內容。 說明:返回值為是否找到分割符(true找到,false未找到),當未找到分割符時返回原字串。 舉例:SplitStr("abc|bc|c", '|', vect) 返回true, vect結果:abc, bc, c SplitStr("abc|bc|c", 's', vect) 返回false, vect結果:abc|bc|c SplitStr("|bc|c", '|', vect) 返回true, vect結果:空字串, bc, c bool SplitStr(const char* pStr, char chSplit, vector<string>& vectRet) { //請補充 const char* p = pStr; const char* pStart = pStr; int32 nLen = 0; char ch = 0; while (1) { ch = *p; //請補充 p++; } return ((int32)vectRet.size() > 1); }
程式碼
自己實現的程式碼被//----------------------------------------------------------------------------------------
夾在中間
bool SplitStr(const char* pStr, char chSplit, std::vector<std::string>& vectRet) { //請補充 //---------------------------------------------------------------------------------------- if (nullptr == pStr || NULL == pStr) return false; //---------------------------------------------------------------------------------------- const char* p = pStr; const char* pStart = pStr; int nLen = 0; char ch = 0; while (1) { ch = *p; //---------------------------------------------------------------------------------------- // 已經到字串結尾,跳出迴圈 if ('\0' == ch) { if (nLen == 0) { ; } else { // 將剩下的字串拷貝到vector中。 std::string str(pStart, nLen); vectRet.push_back(str); } break; } // 還沒有到字串的結尾 else { // 與分隔符不一致,長度+1,繼續找 if (ch != chSplit) { nLen++; } else { // 處理"|"開頭的情況 if (p == pStr) { pStart += 1; } else { // std::string str(pStart, nLen); vectRet.push_back(str); // 這裡+ 1是為了跳過下一個 分隔符 pStart += nLen + 1; nLen = 0; } } } //---------------------------------------------------------------------------------------- p++; } return ((int)vectRet.size() > 1); }
測試
- 1.程式碼
std::vector<std::string> vec; bool ret = SplitStr("abc|bc|c", 's', vec); std::cout << ret << "\n"; std::for_each(std::begin(vec), std::end(vec), [](const std::string& str) { std::cout << "str="; if (0 == str.length()) std::cout << " "; else std::cout << str.c_str() << " "; });
"abc|bc|c" 輸出結果:
- 2.程式碼
std::vector<std::string> vec;
bool ret = SplitStr("abc|bc|c", '|', vec);
std::cout << ret << "\n";
std::for_each(std::begin(vec), std::end(vec), [](const std::string& str)
{
std::cout << "str=";
if (0 == str.length())
std::cout << " ";
else
std::cout << str.c_str() << " ";
});
輸出結果:
- 3.程式碼
std::vector<std::string> vec;
bool ret = SplitStr("|bc|c", '|', vec);
std::cout << ret << "\n";
std::for_each(std::begin(vec), std::end(vec), [](const std::string& str)
{
std::cout << "str=";
if (0 == str.length())
std::cout << " ";
else
std::cout << str.c_str() << " ";
});
輸出結果