由于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; }