c++分割字串
阿新 • • 發佈:2018-12-19
由於C++中沒有C#中對字串Split的操作,最近string使用頻率比較高,寫了以下兩種對字串進行以想要的切割方式切割。
將字串分割並轉換成對應的進位制數
int StringToSystem(string &str, vector<int> &strItem, char TypeName,int System) { int tIndex = 0; int tTemp; if (str == "") { return tIndex; } if (str.find(TypeName) == string::npos) { tTemp = strtoul(str.c_str(), NULL, System); strItem.push_back(tTemp); tIndex++; return tIndex; } auto endPos = str.find(TypeName); auto strLength = str.size(); while (endPos != string::npos) { tIndex++; string Item = str.substr(0, endPos); tTemp = strtoul(Item.c_str(), NULL, System); strItem.push_back(tTemp); strLength = strLength - endPos; str = str.substr(endPos + 1, strLength); endPos = str.find(TypeName); if (endPos == string::npos) { tTemp = strtoul(str.c_str(), NULL, System); strItem.push_back(tTemp); tIndex++; } } return tIndex; }
將字串分割存入容器中
int StringToArray(string str, vector<string > &strItem,char TypeName) { int tIndex = 0; if (str=="") { return tIndex; } if (str.find(TypeName) == string::npos) { strItem.push_back(str); tIndex++; return tIndex; } auto endPos = str.find(TypeName); auto strLength = str.size(); while (endPos!=string::npos) { tIndex++; string Item = str.substr(0, endPos); strItem.push_back(Item); strLength = strLength - endPos; str = str.substr(endPos + 1, strLength); endPos = str.find(TypeName); if (endPos == string::npos) { strItem.push_back(str); tIndex++; } } return tIndex; }
測試:
int main() { string strName = "my name is Neilyo!"; vector<string> strItem; int tlen1 = StringToArray(strName, strItem, ' '); for (int i = 0; i < tlen1; i++) std::cout << strItem[i]<<std::endl; string strTest = "11-22-33-44-55-66-77-88-99-156-200"; vector<int> tItem; int tlen2 = StringToSystem(strTest, tItem, '-',10); for (int i = 0; i < tlen2; i++) std::cout << tItem[i] << std::endl; }