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