istringstream的操作

      今天在stackoverflow上看到这么个问题,写完之后看了看别人的提交的答案,感觉自己的答案虽然能得出正确结果但是有点啰嗦,对于c++还是没有熟练,没有想起有istringstream,而且提问的老外写的程序bug实在是太多了,while循环啊,分号啊都不规范,不过那个return挺有意思,嘿嘿第一次见(可能是写的代码和看的代码太少了吧 ,嘿嘿 ,见笑,我也是一菜),于是我放弃了我原来的答案,修改了一下别人的答案,那个人的答案也不对,不能运行啊,所以说我自己改动了一下.

今儿记录一下,省的以后忘..

老外的提问:

 1 struct client

 2 {

 3     string PhoneNumber;

 4     string FirstName;

 5     string LastName;

 6     string Age;

 7 };

 8 int main()

 9 {

10     string data = getClientDatabase();

11 

12     vector <client> clients;

13 

14     parse_string(data, clients);

15     return 0;

16 }

17 

18 string getClientDatabase()

19 {

20     return

21         "(844)615-4504 Sofia Ross 57 \n"

22         "(822)516-8895 Jenna Doh 30 \n"

23         "(822)896-5453 Emily Saks 43 \n"

24 

25 }

26 

27 void parse_string(string data, vector <client> &clients)

28 {

29     string temp;

30     string temp1;

31     string temp2;

32     string temp3;

33 

34     int i = 0;

35     int j = 0;

36     int k = 0;

37     int l = 0;

38 

39     while (i < data.length())

40     {

41         if (data.at(i) != ' ')

42         {

43             temp.push_back(data.at(i));

44             j++;

45         }

46         else

47         {

48             clients.at(i).PhoneNumber = temp;

49         }

50 

51     }

52     if (data.at(j) != ' ')

53     {

54         temp1.push_back(data.at(j));

55         k++;

56     }

57     else

58     {

59         clients.at(i).FirstName = temp1;

60     }

61 

62     if (data.at(k) != ' ')

63     {

64         temp2.push_back(data.at(k));

65         l++;

66     }

67     else

68     {

69         clients.at(i).LastName = temp2;

70     }

71 

72     if (data.at(l) != ' ')

73     {

74         temp3.push_back(data.at(l));

75 

76     }

77     else

78     {

79         clients.at(i).Age = temp3;

80     }

81     i++;

82 

83 }

我的回答:

 1 void parse_string(string data, vector <client> & clients)

 2  {

 3      struct client tempS;

 4      istringstream iss(data);

 5      for (size_t i=0; iss >> tempS.PhoneNumber; ++i)

 6      {

 7          iss >> tempS.FirstN >> tempS.LastN >> tempS.Age;

 8          clients.push_back(tempS);

 9      }

10  }

11 //test code

12 

13 vector <client>::iterator it = clients.begin();

14      for(; it != clients.end(); ++it )

15     {

16         cout << it->PhoneNumber << " "

17              << it->FirstN << " "

18              << it->LastN << " "

19              << it->Age << endl;

20     }

 

你可能感兴趣的:(String)