我试图将一个字符串解析为一个结构的向量,该结构中包含不同的变量。这是我到目前为止,但似乎没有工作。
struct client
{
string PhoneNumber;
string FirstName;
string LastName;
string Age;
};
int main()
{
string data = getClientDatabase();
vector <client> clients;
parse_string(data, clients);
return 0;
}
string getClientDatabase()
{
return
"(844)615-4504 Sofia Ross 57 \n"
"(822)516-8895 Jenna Doh 30 \n"
"(822)896-5453 Emily Saks 43 \n"
}
所以我写的这个函数似乎没有用,我确定有一种更简单的方法,但我无法弄明白。
void parse_string(string data, vector <client> &clients)
{
string temp;
string temp1;
string temp2;
string temp3;
int i = 0;
int j = 0;
int k = 0;
int l = 0;
while (i < data.length())
{
if (data.at(i) != ' ')
{
temp.push_back(data.at(i));
j++;
}
else
{
clients.at(i).PhoneNumber = temp;
}
}
if (data.at(j) != ' ')
{
temp1.push_back(data.at(j));
k++;
}
else
{
clients.at(i).FirstName = temp1;
}
if (data.at(k) != ' ')
{
temp2.push_back(data.at(k));
l++;
}
else
{
clients.at(i).LastName = temp2;
}
if (data.at(l) != ' ')
{
temp3.push_back(data.at(l));
}
else
{
clients.at(i).Age = temp3;
}
i++;
}
答案 0 :(得分:1)
尝试使用istringstream
对象:
void parse_string(string data, vector <client> & clients) {
istringstream iss(data);
for (size_t i=0; iss >> clients.at(i).PhoneNumber; ++i) {
iss >> clients.at(i).FirstName
>> clients.at(i).LastName
>> clients.at(i).Age;
}
}
答案 1 :(得分:0)
你可以试试这段代码:
void parse_string(string data, vector <client> & clients)
{
struct client tempS;
istringstream iss(data);
for (size_t i=0; iss >> tempS.PhoneNumber; ++i)
{
iss >> tempS.FirstN >> tempS.LastN >> tempS.Age;
clients.push_back(tempS);
}
}
//测试代码
vector <client>::iterator it = clients.begin();
for(; it != clients.end(); ++it )
{
cout << it->PhoneNumber << " "
<< it->FirstN << " "
<< it->LastN << " "
<< it->Age << endl;
}