0

目前,

我有这个字符串us,muscoy,Muscoy,CA,,34.1541667,-117.3433333

我需要解析美国和加州。我能够通过这个正确解析我们:

std::string line;
std::ifstream myfile ("/Users/settingj/Documents/Country-State Parse/worldcitiespop.txt");    
while( std::getline( myfile, line ) )
{

    while ( myfile.good() )
    {
        getline (myfile,line);
        //std::cout << line << std::endl;

        std::cout << "Country:";
        for (int i = 0; i < 2/*line.length()*/; i++)
        {
            std::cout << line[i];
        }
    }

}

但我在解析 CA 时遇到问题。

下面是我挖出的一些代码来查找字符串中出现的 ',' 的数量,但我遇到问题说“在第 3 和第 4 个 ',' 出现之间解析这个字符串。

 // Counts the number of ',' occurrences
 size_t n = std::count(line.begin(), line.end(), ',');
 std::cout << n << std::endl;
4

3 回答 3

2

为此,您可以使用boost::split函数(或)。boost::tokenizer它将字符串拆分为vector<string>.

std::string line;
std::vector<std::string> results;
boost::split(results, line, boost::is_any_of(","));
std::string state = results[3];
于 2013-07-29T18:49:46.993 回答
1

这是 STL 版本,适用于简单的逗号分隔输入文件。

#include<fstream>
#include <string>
#include <iostream>
#include<vector>
#include<sstream>

std::vector<std::string> getValues(std::istream& str)
{
    std::vector<std::string>   result;
    std::string   line;
    std::getline(str,line);

    std::stringstream   lineS(line);
    std::string   cell;

    while(std::getline(lineS,cell,','))
        result.push_back(cell);

    return result;
}


int main()
{
    std::ifstream f("input.txt");
    std::string s;

   //Create a vector or vector of strings for rows and columns

   std::vector< std::vector<std::string> > v; 

   while(!f.eof())
      v.push_back(getValues(f));

   for (auto i:v)
   {  
      for(auto j:i)
         std::cout<<j<< " ";
      std::cout<<std::endl;
   }
}
于 2013-07-29T19:19:46.840 回答
1

不是上课的……哈哈……不过好像是上课的问题……

我有解决方案:

        int count = 0;
        for (int i = 0; i < line.length(); i++)
        {
            if (line[i] == ',')
                count++;
            if (count == 3){
                std::cout << line[i+1];
                if (line[i+1] == ',')
                    break;
            }
        }

只是不得不考虑更多:P

于 2013-07-29T19:00:22.320 回答