中易网

C++中从string串提取被‘,’分隔的子串并转换为整形数组

答案:2  悬赏:60  
解决时间 2021-02-01 20:12
举个例子,string类型的“12,4,521”,提取到int *p为p[0]=12,p[1]=4,p[2]=521,请关键代码附上注释,正解继续加分
最佳答案
#include
#include
#include
using namespace std;


int s2i(const char * str, int *num)
{
int i;
*num = 0;
if (strlen(str) == 0)
{
return -1;
}
for (i = 0; i < strlen(str); i++)
{
if (*(str + i)<'0' || *(str + i) > '9')
{
return -1;
}
*num = (*num) * 10 + (*(str + i)) - '0';
}
return 0;
}


int splitString(string str, string **pStr, int *subStrCount)
{
int strLen = str.length();
int pLen = (strLen + 4) / 4 * 4;
char *pSource = new char[pLen];
char *p;
memset(pSource, 0, pLen);
memcpy(pSource, str.c_str(), str.length());
(*subStrCount) = 0;
for (int i = 0; i < strLen; i++)
{
if (*(pSource + i) == ',')
{
(*subStrCount)++;
*(pSource + i) = 0;
}
}
//字符串不是以分隔符结束(最后一个分割符后还有字符串)
if (*(pSource + strLen - 1) != ',')
{
(*subStrCount)++;
}
*pStr = new string[*(subStrCount)];
p = pSource;
for (int i = 0; i < *subStrCount; i++)
{
(*pStr)[i] = p;
p += (*pStr)[i].length() + 1;
}
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
string strTest = "12,4,521";
string *pStr = NULL;
int *numbs = NULL;
int subStrCount;
splitString(strTest, &pStr, &subStrCount);

if (subStrCount <= 0)
{
return -1;
}
numbs = new int[subStrCount];
for (int i = 0; i < subStrCount; i++)
{
s2i(pStr[i].c_str(), (numbs + i));
}
for (int i = 0; i < subStrCount; i++)
{
cout << *(numbs + i) << " ";
}
cout << endl;
if (pStr != NULL)
{
delete[] pStr;
pStr = NULL;
}

if (numbs != NULL)
{
delete[] numbs;
numbs = NULL;
}
return 0;
}
全部回答
//#include "stdafx.h"//vc++6.0加上这一行. #include using namespace std; void main(void){ string str("12,4,521"); int *p,ln,i,j,nd; char *pc,a[11]; if((pc=new char[(ln=str.length())+1])==NULL){ cout << "Application memory failure...\n"; exit(0); } strcpy(pc,str.c_str()); for(nd=i=1;i
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯