C++中从string串提取被‘,’分隔的子串并转换为整形数组
答案:2 悬赏:60
解决时间 2021-02-01 20:12
- 提问者网友:相思瘸子
- 2021-02-01 09:33
举个例子,string类型的“12,4,521”,提取到int *p为p[0]=12,p[1]=4,p[2]=521,请关键代码附上注释,正解继续加分
最佳答案
- 二级知识专家网友:说多了都是废话
- 2021-02-01 10:18
#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
#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;
}
全部回答
- 1楼网友:湫止没有不同
- 2021-02-01 11:03
//#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
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯