使用C ++按标签拆分字段

时间:2014-04-23 08:31:30

标签: c++ string ifstream getline

给定一个文本文件,就像(file.txt):

  

1234567A(这是标签)彼得,ABC(这是标签)23523456
  1345678A(这是TAB)Michael CDE(这是标签)23246756
  1299283A(这是标签)安迪(这是标签)98458388

ifstream inFile;
string s;
string id;
string name;
int phoneNo;
inFile.open("file.txt");
while (!inFile.eof()) {
   getline(inFile, s, '\t');
}

如何将一行字符串提取到不同的字段中?例如,当我打印s时,它会给出1234567A。我尝试过在Stackoverflow中找到的一些技术,但是,我无法达到目标。

感谢。


我想问的另一件事是第三个字段(即phoneNo)是否包含1-3个元素,

  

1234567A(这是TAB)彼得,ABC(这是标签)23523456(这是标签)12312312
  1345678A(这是TAB)Michael CDE(这是标签)23246756
  1299283A(这是TAB)Andy(这是TAB)98458388(这是标签)123123123(这是标签)123123123

如何区分phoneNo

的数量

1 个答案:

答案 0 :(得分:2)

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


//...

std::ifstream inFile( "file.txt" );

std::string record;

while ( std::getline( inFile, record ) )
{ 
   std::istringstream is( record );

   std::string id;
   std::string name;
   int phoneNo = 0;

   is >> id >> name >> phoneNo; 
}

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


//...

std::ifstream inFile( "file.txt" );

std::string record;

while ( std::getline( inFile, record ) )
{
   if ( record.find_first_not_of( " \t" ) == std::string::npos ) continue;

   std::istringstream is( record );

   std::string id;
   std::string name;
   int phoneNo = 0;

   is >> id >> name >> phoneNo; 
}

例如,如果字段名称由多个单词组成而不是operator >>,则应再次使用函数std::getline例如

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


//...

std::ifstream inFile( "file.txt" );

std::string record;

while ( std::getline( inFile, record ) )
{
   if ( record.find_first_not_of( " \t" ) == std::string::npos ) continue;

   std::istringstream is( record );

   std::string id;
   std::string name;
   int phoneNo = 0;

   std::getline( is, id, '\t' );
   std::getline( is, name, '\t' );
   is >> phoneNo; 
}

如果手机的数量是可变的,您应该使用std::vector<unsigned int>std::vector<std::string>并更改我按以下方式显示的功能的最后一个语句

   while ( is >> phoneNo ) v.push_back( phoneNo );

其中v可以定义为例如std::vector<unsigned int>