• 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     }
  • 相关阅读:
    php反射
    html video api控件总结
    linux CentOS7.2安装ffmpeg-3.0.2
    2019年7月12日星期五(C语言)
    2019年7月11日星期四(C语言)
    2019年7月10日星期三(C语言)
    2019年7月9日星期二(C语言)
    2019年7月8日星期一(C语言)
    2019年7月5日星期五(C语言)
    2019年7月4日星期四(C语言及LINUX命令)
  • 原文地址:https://www.cnblogs.com/anonymity0day/p/4120126.html
Copyright © 2020-2023  润新知